2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnPlayerActor.h"
# include "EtMatrixEx.h"
# include "DnWorld.h"
# include "MAMovementBase.h"
# include "DnWeapon.h"
# include "DnProjectile.h"
# include "DnGameTask.h"
# include "TaskManager.h"
# include "DnPartyTask.h"
# include "DnSkill.h"
# include "PerfCheck.h"
# include "DnDropItem.h"
# include "GameSendPacket.h"
# include "DnMonsterActor.h"
# include "DnStateBlow.h"
# include "MAAiScript.h"
# include "DnBlow.h"
# include "DnItemTask.h"
# include "DNLogConnection.h"
# include "DNGameDataManager.h"
# include "ScoreSystem.h"
# include "DNMissionSystem.h"
# include "DNDBConnectionManager.h"
# include "DnPlayerSpeedHackChecker.h"
# include "DnPlayerDoNotEnterChecker.h"
# include "DnPlayerPickupChecker.h"
# include "DnPlayerSkillChecker.h"
# include "DnPlayerActionChecker.h"
# include "DnPlayAniProcess.h"
# include "DNPvPPlayerAggroSystem.h"
# include "DNMonsterAggroSystem.h"
# include "DnChangeActionSetBlow.h"
# include "DnChangeActionStrProcessor.h"
# include "DNDBConnection.h"
# include "DnChangeStandActionBlow.h"
# include "DnActionSpecificInfo.h"
# include "MasterRewardSystem.h"
# if defined( PRE_ADD_SECONDARY_SKILL )
# include "SecondarySkillRepositoryServer.h"
# endif // #if defined( PRE_ADD_SECONDARY_SKILL )
# include "DnCannonMonsterActor.h"
# include "DNPvPGameRoom.h"
# include "DnApplySEWhenTargetNormalHitProcessor.h"
# include "DnBubbleSystem.h"
# include "DnObserverEventMessage.h"
# include "DnBlockBlow.h"
# include "DnParryBlow.h"
# include "DnCooltimeParryBlow.h"
# include "PvPZombieMode.h"
# include "DNGameServerScriptAPI.h"
# include "DnOrderMySummonedMonsterBlow.h"
# include "IDnSkillUsableChecker.h"
# include "DnTransformBlow.h"
# include "DnBasicBlow.h"
# include "DnCreateBlow.h"
# ifdef PRE_ADD_EXPORT_DPS_INFORMATION
# include "DnDPSReporter.h"
# endif
# if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP)
# include "DnSkillTask.h"
# endif // PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
# include "TotalLevelSkillSystem.h"
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# ifdef _DEBUG
# define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
# endif
float CDnPlayerActor : : s_fRecoverySPTime = 5.f ;
CDnPlayerActor : : CDnPlayerActor ( CMultiRoom * pRoom , int nClassID )
: CDnActor ( pRoom , nClassID )
{
m_pSession = NULL ;
CDnPlayerState : : Initialize ( m_nClassID ) ;
CDnActionBase : : Initialize ( this ) ;
MACP : : Initialize ( this ) ;
m_cMovePushKeyFlag = 0 ;
m_bBattleMode = true ;
m_nWorldLevel = 0 ;
m_nComboDelay = 0 ;
m_nComboCount = 0 ;
m_nTotalComboCount = 0 ;
m_fRecoverySPDelta = 0.f ;
m_bCompleteCutScene = false ;
m_bCheckCompleteCutScene = false ;
m_bSkipCutScene = false ;
m_bGhost = false ;
m_uiStateBlowProcessAfterBit = 0 ;
m_afLastEquipItemSkillDelayTime = 0.0f ;
m_afLastEquipItemSkillRemainTime = 0.0f ;
m_dwSyncDatumTick = 0 ;
m_dwSyncDatumSendTick = 0 ;
m_nVoiceChannelID = 0 ;
m_pPlayerSpeedHackChecker = new CDnPlayerSpeedHackChecker ( this ) ;
m_pPlayerDoNotEnterChecker = new CDnPlayerDoNotEnterChecker ( this ) ;
m_pPlayerPickupChecker = new CDnPlayerPickupChecker ( this ) ;
m_pPlayerSkillChecker = new CDnPlayerSkillChecker ( this ) ;
m_pPlayerActionChecker = new CDnPlayerActionChecker ( this ) ;
memset ( m_bCashSelfDeleteWeapon , 0 , sizeof ( m_bCashSelfDeleteWeapon ) ) ;
memset ( m_bWeaponViewOrder , 0 , sizeof ( m_bWeaponViewOrder ) ) ;
m_iNowMaxProjectileCount = 0 ;
m_iReservedProjectileCount = 0 ;
m_LastEscapeTime = 0 ;
m_dwLastBasicShootActionTime = 0 ;
m_dwLastBasicShootCoolTime = 0 ;
m_dwLastChargeShootTime = 0 ;
m_bCheckProjectileSignalTerm = true ;
m_bUpdatedProjectileInfoFromCmdAction = false ;
m_fFrameSpeed = 1.0f ;
m_bPlayerCannonMode = false ;
m_nSwapSingleSkinActorID = - 1 ;
m_nMonsterMutationTableID = - 1 ;
m_hSwapOriginalHandle . Identity ( ) ;
m_pSwapOriginalAction = NULL ;
m_nDeathCount = 0 ;
m_pBubbleSystem = new BubbleSystem : : CDnBubbleSystem ;
this - > RegisterObserver ( m_pBubbleSystem ) ;
m_bTempSkillAdded = false ;
m_iTempChangedJob = 0 ;
m_nInvalidPlayerCheckCounter = 0 ;
m_bForceEnableRideByTrigger = true ;
m_nVehicleEffectIndex = 0 ;
m_bVehicleMode = false ;
m_vecEventEffectList . clear ( ) ;
for ( int i = 0 ; i < Pet : : Skill : : Max ; i + + )
m_bDeletedPetSkill [ i ] = false ;
m_nAllowedSkill = 0 ;
m_bRefreshTransformMode = false ;
m_bTransformMode = false ;
m_bShootMode = false ;
# ifdef _USE_VOICECHAT
// m_nVoiceUpdateCount = 0;
m_nVoiceRotate = 0 ;
# endif
m_MixedActionTimeStamp = 0 ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_pTotalLevelSkillSystem = NULL ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# ifdef PRE_ADD_COSTUME_SKILL
m_nCostumeSkillID = 0 ;
# endif
m_nLastUsedSkill = 0 ;
}
CDnPlayerActor : : ~ CDnPlayerActor ( )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( IsCannonMode ( ) )
{
static_cast < CDnCannonMonsterActor * > ( m_hCannonMonsterActor . GetPointer ( ) ) - > OnMasterPlayerActorDie ( ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ųȿ<C5B3> <C8BF> <20> <> <EFBFBD> <EFBFBD>
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( pSox )
{
for ( int itr = 0 ; itr < CDnGlyph : : GlyphSlotEnum_Amount ; + + itr )
{
if ( m_hGlyph [ itr ] )
{
if ( CDnGlyph : : PassiveSkill = = pSox - > GetFieldFromLablePtr ( m_hGlyph [ itr ] - > GetClassID ( ) , " _GlyphType " ) - > GetInteger ( ) )
{
int nSkillID = pSox - > GetFieldFromLablePtr ( m_hGlyph [ itr ] - > GetClassID ( ) , " _SkillID " ) - > GetInteger ( ) ;
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( hSkill )
hSkill - > DelGlyphStateEffect ( m_hGlyph [ itr ] - > GetClassID ( ) ) ;
}
}
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> . <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> ij<> <C4B3> <EFBFBD> Ϳ <EFBFBD> <CDBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> Ǯ<> <C7AE> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ų, <20> <> <EFBFBD> ۽<EFBFBD> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> <> <EFBFBD> ش<EFBFBD> .
if ( IsEnabledToggleSkill ( ) )
OnSkillToggle ( m_hToggleSkill , false ) ;
if ( IsEnabledAuraSkill ( ) )
OnSkillAura ( m_hAuraSkill , false ) ;
for ( int i = 0 ; i < 2 ; i + + ) SAFE_RELEASE_SPTR ( m_hCashWeapon [ i ] ) ;
SAFE_RELEASE_SPTR ( m_hSwapOriginalHandle ) ;
SAFE_DELETE ( m_pSwapOriginalAction ) ;
SAFE_DELETE ( m_pPlayerSkillChecker ) ;
SAFE_DELETE ( m_pPlayerActionChecker ) ;
SAFE_DELETE ( m_pPlayerDoNotEnterChecker ) ;
SAFE_DELETE ( m_pPlayerPickupChecker ) ;
SAFE_DELETE ( m_pPlayerSpeedHackChecker ) ;
SAFE_DELETE ( m_pBubbleSystem ) ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
SAFE_DELETE ( m_pTotalLevelSkillSystem ) ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
MAMovementBase * CDnPlayerActor : : CreateMovement ( )
{
MAMovementBase * pMovement = new IBoostPoolMAWalkMovement ( ) ;
return pMovement ;
}
bool CDnPlayerActor : : Initialize ( )
{
bool bResult = CDnActor : : Initialize ( ) ;
m_hObject - > SetCollisionGroup ( COLLISION_GROUP_DYNAMIC ( 1 ) ) ;
m_hObject - > SetTargetCollisionGroup ( COLLISION_GROUP_STATIC ( 1 ) | COLLISION_GROUP_DYNAMIC ( 2 ) | COLLISION_GROUP_DYNAMIC ( 3 ) ) ;
_ASSERT ( m_pAggroSystem = = NULL ) ;
if ( GetGameRoom ( ) - > bIsPvPRoom ( ) )
{
m_pAggroSystem = new CDNPvPPlayerAggroSystem ( GetActorHandle ( ) ) ;
_ASSERT ( m_pAggroSystem ! = NULL ) ;
}
m_mapTumbleHelper . insert ( make_pair ( GetElementIndex ( " Tumble_Front " ) , GetElementIndex ( " Move_Front " ) ) ) ;
m_mapTumbleHelper . insert ( make_pair ( GetElementIndex ( " Tumble_Back " ) , GetElementIndex ( " Move_Back " ) ) ) ;
m_mapTumbleHelper . insert ( make_pair ( GetElementIndex ( " Tumble_Left " ) , GetElementIndex ( " Move_Left " ) ) ) ;
m_mapTumbleHelper . insert ( make_pair ( GetElementIndex ( " Tumble_Right " ) , GetElementIndex ( " Move_Right " ) ) ) ;
// <20> Ҽ<EFBFBD> <D2BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> ϵ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǽý<C7BD> <C3BD> ۸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> Ŭ<> <EFBFBD> ó<> <C3B3> <EFBFBD> ϴ<EFBFBD> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> ý<EFBFBD> <C3BD> ۰ <EFBFBD> <DBB0> <EFBFBD> <20> ణ <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ̾<EFBFBD> <CCBE> ְ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> 1.5<EFBFBD> ʷ<EFBFBD> <20> Ѵ <EFBFBD> .
// <20> <> ǥ<EFBFBD> <C7A5> Move_Front <20> θ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> ص<EFBFBD> <20> ȴ<EFBFBD> . <20> <> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ܷ<EFBFBD> Ȯ<> εDZ⸸ <20> ϸ<EFBFBD> <20> ȴ<EFBFBD> ..
m_mapTumbleHelper . insert ( make_pair ( GetElementIndex ( " ChargeShoot_Stand " ) , GetElementIndex ( " Charge_Front " ) ) ) ;
m_pBubbleSystem - > Initialize ( GetActorHandle ( ) ) ;
m_mapIcyFractionHitted . clear ( ) ;
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
m_FrameSkipCallSkillProcess . SetFramePerSec ( 10.0f ) ;
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_pTotalLevelSkillSystem = new CDnTotalLevelSkillSystem ( GetMySmartPtr ( ) ) ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
return bResult ;
}
void CDnPlayerActor : : Process ( LOCAL_TIME LocalTime , float fDelta )
{
EtVector3 vPrevPos = m_Cross . m_vPosition ;
CDnActor : : Process ( LocalTime , fDelta ) ;
PROFILE_TIME_TEST_BLOCK_START ( " CDnPlayerActor::Process " ) ;
m_pBubbleSystem - > Process ( LocalTime , fDelta ) ;
for ( int i = 0 ; i < 2 ; i + + )
{
if ( m_hCashWeapon [ i ] )
m_hCashWeapon [ i ] - > Process ( LocalTime , fDelta ) ;
}
MAPartsBody : : PreProcess ( LocalTime , fDelta ) ;
if ( 0 < GetCantXZMoveSEReferenceCount ( ) )
m_vAniDistance . x = m_vAniDistance . z = 0.0f ;
# ifdef PRE_ADD_MONSTER_CATCH
if ( ! IsVehicleMode ( ) & & ! m_hCatcherMonster )
# else
if ( ! IsVehicleMode ( ) )
# endif // #ifdef PRE_ADD_MONSTER_CATCH
m_pMovement - > Process ( LocalTime , fDelta ) ;
MAPartsBody : : Process ( m_Cross , LocalTime , fDelta ) ;
ProcessCombo ( LocalTime , fDelta ) ;
ProcessRecoverySP ( LocalTime , fDelta ) ;
m_pPlayerDoNotEnterChecker - > Process ( LocalTime , fDelta ) ;
m_pPlayerSpeedHackChecker - > Process ( LocalTime , fDelta ) ;
m_pPlayerPickupChecker - > Process ( LocalTime , fDelta ) ;
m_pPlayerSkillChecker - > Process ( LocalTime , fDelta ) ;
m_pPlayerActionChecker - > Process ( LocalTime , fDelta ) ;
ProcessCompanion ( LocalTime , fDelta ) ;
ProcessNonLocalShootModeAction ( ) ;
if ( m_bRefreshTransformMode )
RefreshTransformMode ( ) ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
if ( m_pTotalLevelSkillSystem )
m_pTotalLevelSkillSystem - > Process ( LocalTime , fDelta ) ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
PROFILE_TIME_TEST_BLOCK_END ( ) ;
}
void CDnPlayerActor : : CmdPickupItem ( PickupItemStruct * pStruct , DnDropItemHandle hDropItem /*=CDnDropItem::Identity()*/ )
{
# if defined(_CH)
if ( m_pSession - > GetFCMState ( ) ! = FCMSTATE_NONE ) { // 3<> ð<EFBFBD> <20> ̻<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ޱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 090624
// m_pSession->SendPickUp(ERROR_FCMSTATE, -1, NULL, 0);
return ;
}
# endif
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PickUp <20> <> <EFBFBD> <EFBFBD>
if ( GetActorHandle ( ) & & GetActorHandle ( ) - > bIsObserver ( ) )
return ;
// <20> <EFBFBD> ڳ<EFBFBD> <DAB3> Ե<EFBFBD> PickUp <20> <> <EFBFBD> <EFBFBD>
if ( m_pSession & & m_pSession - > bIsGMTrace ( ) )
return ;
if ( ! CDnDropItem : : IsActive ( GetRoom ( ) ) )
return ;
DnDropItemHandle hResult ;
if ( hDropItem )
hResult = hDropItem ;
else
{
_DANGER_POINT ( ) ;
return ;
}
if ( hResult ) {
if ( hResult - > IsReversionItem ( ) & & hResult - > IsReversionLocked ( ) = = false )
{
DnActorHandle hBeneficiery ;
if ( hResult - > GetOwnerUniqueID ( ) ! = - 1 )
{
hBeneficiery = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , hResult - > GetOwnerUniqueID ( ) ) ;
if ( hBeneficiery )
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( hBeneficiery , hResult , ITEMLOOTRULE_NONE ) ;
return ;
}
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( GetMySmartPtr ( ) , hResult , ITEMLOOTRULE_NONE ) ;
return ;
}
if ( hResult - > GetOwnerUniqueID ( ) ! = - 1 ) {
DnActorHandle hOwner = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , hResult - > GetOwnerUniqueID ( ) ) ;
if ( hOwner ) {
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( hOwner , hResult , ITEMLOOTRULE_NONE ) ;
}
return ;
}
else {
eItemRank Rank = CDnItem : : GetItemRank ( hResult - > GetItemID ( ) ) ;
eItemTypeEnum Type = CDnItem : : GetItemType ( hResult - > GetItemID ( ) ) ;
TPARTYITEMLOOTRULE LootType = ITEMLOOTRULE_NONE ;
TITEMRANK LootRank = m_pRoom - > GetPartyItemLootRank ( ) ;
switch ( Type )
{
case ITEMTYPE_INSTANT :
LootType = ITEMLOOTRULE_NONE ;
break ;
default :
if ( LootRank = = ITEMRANK_NONE )
LootType = m_pRoom - > GetPartyItemLootRule ( ) ;
else
LootType = ( Rank > = LootRank ) ? ITEMLOOTRULE_RANDOM : m_pRoom - > GetPartyItemLootRule ( ) ;
break ;
}
// <20> <> <EFBFBD> ϰ<EFBFBD> <CFB0> 쵵 <20> ׳ <EFBFBD> <20> 븻<EFBFBD> <EBB8BB> ȹ<> <C8B9> <EFBFBD> մϴ<D5B4> .
if ( hDropItem - > GetItemID ( ) = = 0 )
LootType = ITEMLOOTRULE_NONE ;
TItemData * pItemData = g_pDataManager - > GetItemData ( hDropItem - > GetItemID ( ) ) ;
if ( pItemData )
{
if ( pItemData - > cReversion = = ITEMREVERSION_BELONG )
LootType = ITEMLOOTRULE_NONE ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 忡<EFBFBD> <E5BFA1> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> LootType <20> <> <EFBFBD> <EFBFBD>
if ( GetRoom ( ) & & static_cast < CDNGameRoom * > ( GetRoom ( ) ) - > bIsZombieMode ( ) )
LootType = ITEMLOOTRULE_NONE ;
switch ( LootType )
{
case ITEMLOOTRULE_NONE :
case ITEMLOOTRULE_OWNER :
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( GetMySmartPtr ( ) , hResult , LootType ) ;
break ;
case ITEMLOOTRULE_RANDOM :
{
int nLiveCount = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetPartyUserCount ( CDNGameRoom : : ePICKUPITEM ) ;
if ( nLiveCount = = 0 ) return ;
int nResultOffset = _rand ( GetRoom ( ) ) % nLiveCount ;
int nOffset = 0 ;
DnActorHandle hResultActor ;
int nPartyCount = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserCount ( ) ;
for ( int i = 0 ; i < nPartyCount ; i + + ) {
CDNUserSession * pSession = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserData ( i ) ;
if ( ! pSession ) continue ;
if ( pSession - > bIsGMTrace ( ) ) continue ;
# if defined _CH
if ( pSession - > GetFCMState ( ) ! = FCMSTATE_NONE ) continue ;
# endif
DnActorHandle hActor = pSession - > GetActorHandle ( ) ;
if ( ! hActor | | hActor - > IsDie ( ) ) continue ;
if ( nOffset = = nResultOffset ) {
hResultActor = hActor ;
break ;
}
nOffset + + ;
}
if ( hResultActor )
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( hResultActor , hResult , LootType ) ;
}
break ;
case ITEMLOOTRULE_LEADER :
{
int nPartyCount = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserCount ( ) ;
DnActorHandle hResultActor ;
for ( int i = 0 ; i < nPartyCount ; i + + ) {
CDNGameRoom : : PartyStruct * pPartyStruct = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetPartyData ( i ) ;
if ( ! pPartyStruct ) continue ;
if ( pPartyStruct - > bLeader ) {
hResultActor = ( pPartyStruct - > pSession ) ? pPartyStruct - > pSession - > GetActorHandle ( ) : CDnActor : : Identity ( ) ;
}
}
if ( hResultActor )
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( hResultActor , hResult , LootType ) ;
}
break ;
case ITEMLOOTRULE_INORDER :
{
CDNUserSession * pSession = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserData ( m_pRoom - > GetCurrentItemLooterIdx ( ) ) ;
if ( pSession )
{
DnActorHandle hActor = pSession - > GetActorHandle ( ) ;
CDnItemTask : : GetInstance ( GetRoom ( ) ) . PickUpItem ( hActor , hResult , LootType ) ;
}
}
break ;
}
}
}
}
void CDnPlayerActor : : OnSignal ( SignalTypeEnum Type , void * pPtr , LOCAL_TIME LocalTime , LOCAL_TIME SignalStartTime , LOCAL_TIME SignalEndTime , int nSignalIndex )
{
switch ( Type ) {
case STE_Hit :
{
}
break ;
case STE_Jump :
{
JumpStruct * pStruct = ( JumpStruct * ) pPtr ;
EtVector2 vVec ( 0.f , 0.f ) ;
if ( 0 = = GetCantXZMoveSEReferenceCount ( ) )
{
if ( ! pStruct - > bIgnoreJumpDir ) {
if ( m_cMovePushKeyFlag & 0x01 ) vVec . x - = 1.f ;
if ( m_cMovePushKeyFlag & 0x02 ) vVec . x + = 1.f ;
if ( m_cMovePushKeyFlag & 0x04 ) vVec . y + = 1.f ;
if ( m_cMovePushKeyFlag & 0x08 ) vVec . y - = 1.f ;
EtVec2Normalize ( & vVec , & vVec ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȭ [2010/11/09 semozz]
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɶ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Velocity<74> <79> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <20> ϴ°<CFB4> <C2B0> <EFBFBD>
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȭ<EFBFBD> <C8AD> <20> ¾<EFBFBD> <C2BE> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( pStruct - > bResetPrevVelocity ) {
SetVelocityY ( 0.f ) ;
SetResistanceY ( 0.f ) ;
}
Jump ( pStruct - > fJumpVelocity , vVec ) ;
SetResistanceY ( pStruct - > fJumpResistance ) ;
}
return ;
case STE_CustomAction :
{
CustomActionStruct * pStruct = ( CustomActionStruct * ) pPtr ;
ResetCustomAction ( ) ;
SetCustomAction ( pStruct - > szChangeAction , ( float ) pStruct - > nChangeActionFrame ) ;
}
return ;
case STE_PickupItem :
{
}
return ;
case STE_RebirthAnyPlayer :
{
// [2011/02/11 semozz]
// <20> <> <EFBFBD> 巡<EFBFBD> <E5B7A1> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ƽ <20> <> Ȱ <20> <> <EFBFBD> <EFBFBD> ..
CMultiRoom * pRoom = GetRoom ( ) ;
if ( ! pRoom )
break ;
eDragonNestType _dragonNestType = CDnWorld : : GetInstance ( pRoom ) . GetDragonNestType ( ) ;
RebirthAnyPlayerStruct * pStruct = ( RebirthAnyPlayerStruct * ) pPtr ;
CDNUserSession * pSession = NULL ;
float fMinDist = FLT_MAX ;
for ( DWORD i = 0 ; i < CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserCount ( ) ; i + + ) {
CDNGameRoom : : PartyStruct * pParty = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetPartyData ( i ) ;
if ( ! pParty | | ! pParty - > pSession ) continue ;
if ( pParty - > pSession = = m_pSession ) continue ;
if ( pParty - > pSession - > GetState ( ) ! = SESSION_STATE_GAME_PLAY )
continue ;
DnActorHandle hActor = pParty - > pSession - > GetActorHandle ( ) ;
if ( ! hActor ) continue ;
CDnPlayerActor * pPlayer = ( CDnPlayerActor * ) hActor . GetPointer ( ) ;
if ( ! pPlayer - > IsDie ( ) | | ! pPlayer - > IsGhost ( ) ) continue ;
if ( pParty - > nUsableRebirthCoin = = 0 ) continue ;
EtVector3 vVec = * GetPosition ( ) - * hActor - > GetPosition ( ) ;
float fDist = EtVec3LengthSq ( & vVec ) ;
if ( fDist < fMinDist ) {
fMinDist = fDist ;
pSession = pParty - > pSession ;
}
}
if ( ! pSession | | fMinDist > ( float ) ( pStruct - > nRadius * pStruct - > nRadius ) ) break ;
if ( m_pSession - > GetStatusData ( ) - > wCashRebirthCoin < = 0 )
{
GetUserSession ( ) - > SendRebirthCoin ( ERROR_ITEM_REBIRTH_CASHCOIN_SHORT_FAIL , m_pPartyData - > nUsableRebirthCoin , _REBIRTH_SELF , GetUserSession ( ) - > GetSessionID ( ) ) ;
break ;
}
CDnItemTask : : GetInstance ( GetRoom ( ) ) . RequestRebirthCoinUseAnyPlayer ( m_pSession , pSession ) ;
UpdateRebirthPlayer ( ) ;
}
break ;
case STE_CancelChangeStandActionSE :
{
CDnChangeStandActionBlow : : ReleaseStandChangeSkill ( GetActorHandle ( ) , false ) ;
}
break ;
case STE_CancelChangeStandEndActionSE :
{
CancelChangeStandEndActionSEStruct * pStruct = ( CancelChangeStandEndActionSEStruct * ) pPtr ;
CDnChangeStandActionBlow : : ReleaseStandChangeSkill ( GetActorHandle ( ) , false , pStruct - > szEndAction ) ;
}
break ;
case STE_TriggerEvent :
{
TriggerEventStruct * pStruct = ( TriggerEventStruct * ) pPtr ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . InsertTriggerEventStore ( " EventArea " , - 1 ) ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . InsertTriggerEventStore ( " ActorHandle " , GetSessionID ( ) ) ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . InsertTriggerEventStore ( " EventID " , pStruct - > nEventID ) ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . OnTriggerEventCallback ( " CDnActor::TriggerEvent " , LocalTime , 0.f ) ;
}
break ;
case STE_ShootCannon :
{
ShootCannonStruct * pStruct = ( ShootCannonStruct * ) pPtr ;
if ( IsCannonMode ( ) )
{
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> CS_CANNONROTATESYNC <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TargetPosition <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_hCannonMonsterActor - > UseSkill ( pStruct - > CannonMonsterSkillID ) ;
}
}
break ;
// #29925 <20> <> <20> ñ׳ ο <D7B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
case STE_ChangeActionSECheck :
{
ChangeActionSECheckStruct * pStruct = ( ChangeActionSECheckStruct * ) pPtr ;
if ( false = = IsAppliedThisStateBlow ( ( STATE_BLOW : : emBLOW_INDEX ) pStruct - > nStateEffectID ) )
{
SetActionQueue ( pStruct - > szChangeAction ) ;
}
}
break ;
/*
// Note: <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> ʰ<EFBFBD> ó<> <C3B3> <EFBFBD> Ǿ<EFBFBD> Ŭ<> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <20> <EFBFBD> <20> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 찡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
// Ŭ<> <C5AC> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> ..
case STE_CanUseSkill :
{
CanUseSkillStruct * pStruct = ( CanUseSkillStruct * ) pPtr ;
m_bUseSignalSkillCheck = ( pStruct - > bUseSignalSkillCheck ? TRUE : FALSE ) ;
SetSignalSkillCheck ( pStruct - > CheckType , m_bUseSignalSkillCheck ) ;
}
break ;
*/
case STE_OrderMySummonedMonster :
{
OrderMySummonedMonsterStruct * pStruct = ( OrderMySummonedMonsterStruct * ) pPtr ;
OrderUseSkillToMySummonedMonster ( pStruct ) ;
}
break ;
}
CDnActor : : OnSignal ( Type , pPtr , LocalTime , SignalStartTime , SignalEndTime , nSignalIndex ) ;
}
void CDnPlayerActor : : OnDrop ( float fCurVelocity )
{
if ( IsAir ( ) ) {
if ( ! IsHit ( ) ) {
//////////////////////////////////////////////////////////////////////////
// #32977 - ž <20> <> <EFBFBD> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> س<EFBFBD> <D8B3> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> ž <20> <> <EFBFBD> Ǵ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> ó<> <C3B3> <20> DZ<EFBFBD> <C7B1> <EFBFBD>
// OnDrop<6F> <70> ȣ <> <C8A3> <20> Ǹ<EFBFBD> ž <20> <> <EFBFBD> Ǵ<C7B4> <20> ִ<EFBFBD> STE_Jump<6D> <70> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʾ Ƽ <CABE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̾<EFBFBD> <CCBE> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> ȴ<EFBFBD> .
// <20> <EFBFBD> <D7B7> <EFBFBD> <20> ϴ<EFBFBD> ..
// <20> <> <EFBFBD> <EFBFBD> Frame<6D> <65> 0<> ̰<EFBFBD> , STE_Jump<6D> ñ׳ <C3B1> <D7B3> <EFBFBD> 0<> <30> <EFBFBD> <EFBFBD> <EFBFBD> ӿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> _Landing<6E> <67> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
//////////////////////////////////////////////////////////////////////////
float fCurrentFrame = CDnActionBase : : GetCurFrame ( ) ;
float fPrevFrame = CDnActionBase : : m_fPrevFrame ;
ActionElementStruct * pStruct = GetElement ( GetCurrentAction ( ) ) ;
if ( pStruct )
{
bool hasJumpSignal = false ;
CEtActionSignal * pSignal = NULL ;
for ( int i = 0 ; i < ( int ) pStruct - > pVecSignalList . size ( ) ; + + i )
{
pSignal = pStruct - > pVecSignalList [ i ] ;
if ( pSignal & & pSignal - > GetSignalIndex ( ) = = STE_Jump )
{
hasJumpSignal = true ;
break ;
}
}
if ( hasJumpSignal )
{
//STE_Jump<6D> <70> <20> ְ<EFBFBD> , actionQueue<75> <65> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ŵ..(<28> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <EFBFBD> <EFBFBD> ?..)
if ( false = = m_szActionQueue . empty ( ) )
{
return ;
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> STE_Jump<6D> <70> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ְ<EFBFBD> , 0<> <30> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> STE_Jump ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> ..
else if ( false = = m_szAction . empty ( ) & & fPrevFrame = = 0.0f )
{
return ;
}
}
}
//////////////////////////////////////////////////////////////////////////
char szStr [ 64 ] ;
sprintf_s ( szStr , " %s_Landing " , GetCurrentAction ( ) ) ;
if ( IsExistAction ( szStr ) )
{
SetActionQueue ( szStr , 0 , 2.f , 0.f , true , false ) ;
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϶<EFBFBD> ü<> ξ<CEBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( m_hProcessSkill )
{
m_hProcessSkill - > AddUseActionName ( szStr ) ;
m_hProcessSkill - > OnChainInput ( szStr ) ;
}
}
else { // <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쿡 <20> ϴÿ<CFB4> <C3BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <CFB1> ־ <20> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . <20> ϴ<EFBFBD> <CFB4> <EFBFBD> <20> <> <EFBFBD> 缭 <20> ־<EFBFBD> <D6BE> ִ°<D6B4> <C2B0> <EFBFBD>
if ( GetVelocity ( ) - > y ! = 0.f )
SetActionQueue ( " Stand " , 0 , 0.f , 0.f , true , false ) ;
}
SetMovable ( false ) ;
}
else {
std : : string szAction ;
float fBlendFrame = 2.f ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ӵ<EFBFBD> <D3B5> <EFBFBD> 10<31> ̻<EFBFBD> <CCBB> ̸<EFBFBD> bigBounce<63> <65> <20> ѹ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( fCurVelocity < - 6.f & & m_HitParam . vVelocity . y ! = 0.f & & abs ( m_HitParam . vVelocity . y ) > 0.1f ) {
if ( m_HitParam . vVelocity . y > 0.f ) {
m_HitParam . vVelocity . y * = 0.6f ;
SetVelocityY ( m_HitParam . vVelocity . y ) ;
}
else { // <20> <> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٴ<EFBFBD> <D9B4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_HitParam . vVelocity . y * = - 0.6f ;
if ( m_HitParam . vResistance . y > 0.f )
m_HitParam . vResistance . y * = - 1.f ;
SetVelocityY ( m_HitParam . vVelocity . y ) ;
if ( m_HitParam . vVelocity . y > 0 & & m_HitParam . vResistance . y < = 0 )
SetResistanceY ( - 15.0f ) ;
else
SetResistanceY ( m_HitParam . vResistance . y ) ;
}
szAction = " Hit_AirBounce " ;
}
else {
szAction = " Down_SmallBounce " ;
fBlendFrame = 0.f ;
}
SetActionQueue ( szAction . c_str ( ) , 0 , fBlendFrame , 0.f , true , false ) ;
}
}
}
void CDnPlayerActor : : OnStop ( EtVector3 & vPosition )
{
if ( IsProcessSkill ( ) ) return ;
CmdStop ( " Stand " ) ;
}
void CDnPlayerActor : : OnFall ( float fCurVelocity )
{
// #31056 Move <20> ̰<EFBFBD> Air <20> ̸<EFBFBD> <20> <> <EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> ̵<EFBFBD> <CCB5> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> ̹Ƿ<CCB9> Fall ó<> <C3B3> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> . (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ž<> <C5BE> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
if ( ! ( IsMove ( ) & & IsAir ( ) ) & &
( IsStay ( ) | | IsMove ( ) ) & &
! IsFloorCollision ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ؼ<EFBFBD> <20> <> <EFBFBD> ܵ<EFBFBD> <DCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ö<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̴°<CCB4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> غ<EFBFBD> <D8BA> ƿ<EFBFBD> .
EtVector3 vDir = * GetPosition ( ) - * GetPrevPosition ( ) ;
EtVec3Normalize ( & vDir , & vDir ) ;
float fDot = EtVec3Dot ( & EtVector3 ( 0.f , 1.f , 0.f ) , & vDir ) ;
float fAngle = EtToDegree ( EtAcos ( fDot ) ) ;
if ( fCurVelocity < - 5.f & & fAngle > 155.f ) {
ActionElementStruct * pStruct = GetElement ( " Jump " ) ;
if ( pStruct ) {
SetActionQueue ( " Jump " , 0 , 6.f , ( float ) pStruct - > dwLength / 2.f ) ;
}
}
}
}
void CDnPlayerActor : : OnDamage ( CDnDamageBase * pHitter , SHitParam & HitParam , HitStruct * pHitStruct )
{
# if defined( PRE_ADD_SECONDARY_SKILL )
if ( GetUserSession ( ) & & GetUserSession ( ) - > GetSecondarySkillRepository ( ) )
static_cast < CSecondarySkillRepositoryServer * > ( GetUserSession ( ) - > GetSecondarySkillRepository ( ) ) - > CancelManufacture ( ) ;
# endif // #if defined( PRE_ADD_SECONDARY_SKILL )
if ( IsCannonMode ( ) )
{
HitParam . szActionName . clear ( ) ;
HitParam . vViewVec = * GetLookDir ( ) ;
HitParam . vResistance = EtVector3 ( 0.0f , 0.0f , 0.0f ) ;
HitParam . vVelocity = EtVector3 ( 0.0f , 0.0f , 0.0f ) ;
}
int nSeed = CRandom : : Seed ( GetRoom ( ) ) ;
_srand ( GetRoom ( ) , nSeed ) ;
INT64 nTemp = GetHP ( ) ;
CDnActor : : OnDamage ( pHitter , HitParam , pHitStruct ) ;
INT64 nDamage = nTemp - GetHP ( ) ;
INT64 biKillerCharDBID = 0 ;
if ( GetGameRoom ( ) )
{
DnActorHandle hHitter = pHitter ? pHitter - > GetActorHandle ( ) : CDnActor : : Identity ( ) ;
GetGameRoom ( ) - > OnDamage ( GetActorHandle ( ) , hHitter , nDamage ) ;
if ( GetGameRoom ( ) - > GetGameTask ( ) )
GetGameRoom ( ) - > GetGameTask ( ) - > OnDamage ( GetActorHandle ( ) , hHitter , nDamage ) ;
if ( IsDie ( ) & & hHitter & & hHitter - > IsPlayerActor ( ) ) {
CDnPlayerActor * pPlayer = ( CDnPlayerActor * ) hHitter . GetPointer ( ) ;
biKillerCharDBID = pPlayer - > GetUserSession ( ) - > GetCharacterDBID ( ) ;
}
}
if ( m_HitParam . bSuccessNormalDamage )
{
m_nComboDelay = 0 ;
m_nComboCount = 0 ;
}
UpdateAttackedCPPoint ( pHitter , m_HitParam . HitType ) ;
ResetCustomAction ( ) ;
RequestDamage ( pHitter , nSeed , nDamage ) ;
switch ( pHitter - > GetDamageObjectType ( ) )
{
case DamageObjectTypeEnum : : Actor :
{
DnActorHandle hActor = pHitter - > GetActorHandle ( ) ;
if ( m_pAggroSystem )
m_pAggroSystem - > OnDamageAggro ( hActor , HitParam , ( int ) nDamage ) ;
}
break ;
}
}
void CDnPlayerActor : : CmdMove ( EtVector3 & vPos , const char * szActionName , int nLoopCount , float fBlendFrame )
{
MovePos ( vPos , false ) ;
// #31940 <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 <20> и<EFBFBD> <D0B8> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸鼭 <20> ǰݵǾ<DDB5> <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// Ŭ<> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ־ <20> ̵<EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> °<EFBFBD> <C2B0> <EFBFBD> CS_CMDMOVE <20> <> Ŷ<EFBFBD> <C5B6> <20> ͼ<EFBFBD> <20> <> <EFBFBD> ⼭ Move_ <20> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<EFBFBD> <C3B3> .
if ( m_szAction = = " Skill_Parrying " | |
m_szActionQueue = = " Skill_Parrying " )
return ;
SetActionQueue ( szActionName , nLoopCount , fBlendFrame ) ;
}
void CDnPlayerActor : : CmdStop ( const char * szActionName , int nLoopCount , float fBlendFrame , float fStartFrame )
{
MAMovementBase * pMovement = GetMovement ( ) ;
if ( ! pMovement ) return ;
pMovement - > ResetMove ( ) ;
// #31940 <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 <20> и<EFBFBD> <D0B8> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸鼭 <20> ǰݵǾ<DDB5> <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ٷ<EFBFBD> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> ߸鼭 CS_CMDSTOP <20> <> Ŷ<EFBFBD> <C5B6> <20> ͼ<EFBFBD> <20> <> <EFBFBD> ⼭ Stand <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<EFBFBD> <C3B3> .
if ( m_szAction = = " Skill_Parrying " | |
m_szActionQueue = = " Skill_Parrying " )
return ;
SetActionQueue ( szActionName , nLoopCount , fBlendFrame , fStartFrame ) ;
}
void CDnPlayerActor : : 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*/ )
{
// Note: <20> ൿ<EFBFBD> Ұ<EFBFBD> <D2B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
// SetAction() <20> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȳ<EFBFBD> <C8B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> Ƿ<EFBFBD> <20> ñ׳ <C3B1> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
if ( GetCantActionSEReferenceCount ( ) > 0 ) return ;
if ( false = = bOnlyCheck )
{
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( ! hSkill ) return ;
// Note: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ߵ <EFBFBD> <20> ߿<EFBFBD> <20> <> <20> κп<CEBA> <20> <> <20> ߵ <EFBFBD> <20> ǵ<EFBFBD> <C7B5> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ־
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> մϴ<D5B4> .
if ( m_hProcessSkill /*&& m_hProcessSkill != hSkill*/ )
{
if ( false = = ( IsEnabledAuraSkill ( ) & & m_hProcessSkill - > IsAuraOn ( ) ) )
{
m_hProcessSkill - > OnEnd ( CDnActionBase : : m_LocalTime , 0.f ) ;
}
m_hProcessSkill . Identity ( ) ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> Ű<> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> .
if ( bChargeKey )
{
hSkill - > SetPassiveSkillLength ( - 1.0f ) ;
}
else
{
// <20> нú<D0BD> <20> <> ų <20> ǿ<D7BC> next <20> DZ<D7BC> <C7B1> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// next <20> <EFBFBD> <D7BC> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
DWORD dwActionLength = 0 ;
ActionElementStruct * pElement = GetElement ( szActionName ) ;
if ( pElement )
{
if ( pElement - > dwLength < = ( DWORD ) fStartFrame )
fStartFrame = pElement - > dwLength * 1.f ;
dwActionLength = pElement - > dwLength - ( DWORD ) fStartFrame ;
}
else
{
fStartFrame = 0.0f ;
}
// #25042 Stand <20> <EFBFBD> <D7BC> <EFBFBD> next <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ƴϹ Ƿ<CFB9> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> Խ<EFBFBD> Ű<EFBFBD> <C5B0> <20> ʴ´ <CAB4> .
if ( pElement - > szNextActionName ! = " Stand " & &
0 = = strstr ( pElement - > szNextActionName . c_str ( ) , " _Landing " ) )
{
ActionElementStruct * pNextElement = GetElement ( pElement - > szNextActionName . c_str ( ) ) ;
if ( pNextElement )
dwActionLength + = pNextElement - > dwLength ;
}
hSkill - > SetPassiveSkillLength ( ( float ) dwActionLength / s_fDefaultFps ) ;
// Active Type<70> <65> <20> <> ų(<28> ̱۽<CCB1> <20> <> <EFBFBD> <EFBFBD> Ʈ) <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Passive Type<70> <65> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> 쵵 <20> ִ<EFBFBD> .
// <20> <> <EFBFBD> Ŀ<EFBFBD> _CheckActionWithProcessPassiveActionSkill <20> <> <EFBFBD> <EFBFBD> ActionLength<74> <68> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ϰ<EFBFBD> <20> Ǹ<EFBFBD>
// Passive Type <20> <> <20> <> <EFBFBD> <EFBFBD> ChaningPassiveSkill<6C> <6C> true<75> <65> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> µ<EFBFBD> Active Type<70> ̶<EFBFBD> <CCB6> <EFBFBD> false <20> ̴<EFBFBD> .
// <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> ⼭ ChaningPassiveKill<6C> <6C> true<75> <65> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
if ( hSkill - > GetSkillType ( ) = = CDnSkill : : Active ) // Active <20> ϶<EFBFBD> <CFB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ݴϴ<DDB4> .
hSkill - > SetChaningPassiveSkill ( true ) ;
}
// <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų<EFBFBD> <C5B3> InputHasPassiveSkill <20> <> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> UsableCheck <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <20> Ѵ <EFBFBD> .
if ( CDnSkill : : Active = = hSkill - > GetSkillType ( ) )
{
m_bUseSignalSkillCheck = true ;
for ( int i = 0 ; i < 3 ; + + i )
SetSignalSkillCheck ( i , true ) ;
}
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> 0.5<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ΰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
// <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> Ҷ<EFBFBD> <D2B6> <EFBFBD> <20> <> Ÿ 0.5<EFBFBD> <EFBFBD> <20> ̻<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> Ӻ<EFBFBD> Ÿ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ũ<> ٸ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> . (#19737)
hSkill - > UpdateSkillCoolTimeExactly ( ) ;
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
CDnSkill : : UsingResult eResult = CanExecuteSkill ( hSkill ) ;
if ( eResult = = CDnSkill : : UsingResult : : Success )
{
//
m_nLastUsedSkill = hSkill - > GetClassID ( ) ;
//
ExecuteSkill ( hSkill , CDnActionBase : : m_LocalTime , 0.f ) ;
hSkill - > FromInputHasPassive ( ) ;
SetActionQueue ( szActionName , nLoopCount , fBlendFrame , fStartFrame , bCheckOverlapAction ) ;
}
else {
( ( CDnPlayerSkillChecker * ) m_pPlayerSkillChecker ) - > OnInvalidUseSkill ( nSkillID , eResult ) ;
}
// <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų<EFBFBD> <C5B3> InputHasPassiveSkill <20> <> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> UsableCheck <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( CDnSkill : : Active = = hSkill - > GetSkillType ( ) )
{
m_bUseSignalSkillCheck = false ;
for ( int i = 0 ; i < 3 ; + + i )
SetSignalSkillCheck ( i , false ) ;
}
// <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> нú<D0BD> /<2F> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> .
hSkill - > SetPassiveSkillActionName ( szActionName ) ;
}
else
SetActionQueue ( szActionName , nLoopCount , fBlendFrame , fStartFrame , bCheckOverlapAction ) ;
m_fDownDelta = 0.f ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> PvP <20> <> <EFBFBD> Խ<EFBFBD> <20> ڵ嵵 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> ) <20> ˷<EFBFBD> <CBB7> ּ<EFBFBD> <D6BC> <EFBFBD> .
int CDnPlayerActor : : CmdAddStateEffect ( const CDnSkill : : SkillInfo * pParentSkill , STATE_BLOW : : emBLOW_INDEX emBlowIndex , int nDurationTime , const char * szParam , bool bOnPlayerInit /* = false */ , bool bCheckCanBegin /* = true*/ , bool bEternity /*= false*/ )
{
if ( emBlowIndex < STATE_BLOW : : BLOW_NONE | | emBlowIndex > = STATE_BLOW : : BLOW_MAX )
{
if ( pParentSkill )
g_Log . Log ( LogType : : _ERROR , L " [CDnActor::CmdAddStateEffect] SkillID:%d, STATE_BLOW:%d \r \n " , pParentSkill - > iSkillID , emBlowIndex ) ;
else
g_Log . Log ( LogType : : _ERROR , L " [CDnActor::CmdAddStateEffect] STATE_BLOW:%d \r \n " , emBlowIndex ) ;
return - 1 ;
}
int iID = CDnActor : : CmdAddStateEffect ( pParentSkill , emBlowIndex , nDurationTime , szParam , bOnPlayerInit , bCheckCanBegin , bEternity ) ;
if ( - 1 = = iID )
return - 1 ;
DnBlowHandle hAddedBlow = m_pStateBlow - > GetStateBlowFromID ( iID ) ;
const CPacketCompressStream * pPacket = hAddedBlow - > GetPacketStream ( szParam , bOnPlayerInit ) ;
Send ( eActor : : SC_CMDADDSTATEEFFECT , const_cast < CPacketCompressStream * > ( pPacket ) ) ;
if ( GetGameRoom ( ) )
GetGameRoom ( ) - > OnCmdAddStateEffect ( hAddedBlow - > GetParentSkillInfo ( ) ) ;
CheckAndRegisterObserverStateBlow ( hAddedBlow ) ;
return iID ;
}
void CDnPlayerActor : : CmdRemoveStateEffect ( STATE_BLOW : : emBLOW_INDEX emBlowIndex , bool bRemoveFromServerToo /*= true */ )
{
if ( m_pStateBlow - > IsApplied ( emBlowIndex ) )
{
if ( bRemoveFromServerToo )
CDnActor : : CmdRemoveStateEffect ( emBlowIndex ) ;
SendRemoveStateEffect ( emBlowIndex ) ;
}
}
void CDnPlayerActor : : SendRemoveStateEffect ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
BYTE pBuffer [ 32 ] ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & emBlowIndex , sizeof ( STATE_BLOW : : emBLOW_INDEX ) ) ;
Send ( eActor : : SC_CMDREMOVESTATEEFFECT , & Stream ) ;
}
void CDnPlayerActor : : SendRemoveStateEffectGraphic ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & emBlowIndex , sizeof ( int ) ) ;
Send ( eActor : : SC_BLOW_GRAPHIC_ERASE , & Stream ) ;
}
void CDnPlayerActor : : CmdToggleBattle ( bool bBattleMode )
{
if ( bBattleMode = = true )
{
if ( ! m_hWeapon [ 0 ] ) {
m_bBattleMode = false ;
return ;
}
}
if ( bBattleMode ! = m_bBattleMode )
{
SetBattleMode ( bBattleMode ) ;
bool bSkipAction = false ;
# if defined(PRE_ADD_50907)
bool bSkipChangeAction = IsSkipChangeWeaponAction ( ) ;
if ( bSkipChangeAction = = true )
return ;
# endif // PRE_ADD_50907
if ( m_bShootMode )
{
if ( m_bBattleMode = = true ) SetActionQueue ( " MOD_PullOut_Weapon " ) ;
else SetActionQueue ( " MOD_PutIn_Weapon " ) ;
// ShootMode<64> <65> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <CFB1> <E2B6A7> <EFBFBD> <EFBFBD> Normal<61> <6C> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ൿ<EFBFBD> <E0B5BF> GetchangeShootaction <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϱ <CFB1> <E2B6A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⼭ <20> ִ´ <D6B4> .
bSkipAction = true ;
}
if ( ! bSkipAction )
{
if ( ! IsDie ( ) )
{
if ( m_bBattleMode = = true ) SetActionQueue ( " PullOut_Weapon " ) ;
else SetActionQueue ( " PutIn_Weapon " ) ;
}
}
}
}
void CDnPlayerActor : : CmdAddExperience ( TExpData & ExpData , int nLogCode , INT64 biFKey )
{
int nExp = ExpData . nExperience ;
int nEventExp = ExpData . nEventExperience ;
int nPCBangExp = ExpData . nPcBangExperience ;
int nVIPExp = ExpData . nVIPExperience ;
int nPromoExp = ExpData . nPromotionExperience ;
TPlayerCommonLevelTableInfo * pPlayerCommonLevelTableInfo = g_pDataManager - > GetPlayerCommonLevelTable ( GetLevel ( ) ) ;
if ( pPlayerCommonLevelTableInfo )
{
//<2F> <> <EFBFBD> ⼭ 1.5<EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (<28> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ִ°<D6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ҵ<EFBFBD> ....dyss)
nExp = ( int ) ( nExp * pPlayerCommonLevelTableInfo - > fAddGainExp ) ;
nEventExp = ( int ) ( nEventExp * pPlayerCommonLevelTableInfo - > fAddGainExp ) ;
nPCBangExp = ( int ) ( nPCBangExp * pPlayerCommonLevelTableInfo - > fAddGainExp ) ;
nVIPExp = ( int ) ( nVIPExp * pPlayerCommonLevelTableInfo - > fAddGainExp ) ;
nPromoExp = ( int ) ( nPromoExp * pPlayerCommonLevelTableInfo - > fAddGainExp ) ;
}
# if defined( PRE_USA_FATIGUE )
int iPwrExp = 0 ;
if ( nLogCode = = DBDNWorldDef : : CharacterExpChangeCode : : DungeonMonster )
{
nLogCode = DBDNWorldDef : : CharacterExpChangeCode : : Dungeon ;
if ( m_pSession & & m_pSession - > bIsNoFatigueEnter ( ) = = true )
{
int iTemp = nExp + ExpData . nItemExperience ;
nExp = ( iTemp * g_pDataManager - > GetNoFatigueExpRate ( ) ) / 100 ;
# if defined( _WORK )
char szBuf [ MAX_PATH ] ;
sprintf_s ( szBuf , " <EFBFBD> Ϲ <EFBFBD> <EFBFBD> Ƿε<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Exp%d->%d" , iTemp , nExp ) ;
std : : cout < < szBuf < < std : : endl ;
# endif // #if defined( _WORK )
}
else
{
iPwrExp = ( ( nExp + ExpData . nItemExperience ) * ( g_pDataManager - > GetFatigueExpRate ( ) - g_pDataManager - > GetNoFatigueExpRate ( ) ) ) / 100 ;
int iTemp = nExp + ExpData . nItemExperience ;
nExp = ( iTemp * g_pDataManager - > GetFatigueExpRate ( ) ) / 100 ;
# if defined( _WORK )
char szBuf [ MAX_PATH ] ;
sprintf_s ( szBuf , " <EFBFBD> Ϲ <EFBFBD> <EFBFBD> Ƿε<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Exp%d->%d" , iTemp , nExp ) ;
std : : cout < < szBuf < < std : : endl ;
# endif // #if defined( _WORK )
}
}
# endif // #if defined( PRE_USA_FATIGUE )
# if defined(_CH)
if ( m_pSession - > GetFCMState ( ) = = FCMSTATE_HALF ) {
nExp = ExpData . nExperience / 2 ;
nEventExp = ( ExpData . nEventExperience > 0 ) ? ExpData . nEventExperience / 2 : 0 ;
nPCBangExp = ( ExpData . nPcBangExperience > 0 ) ? ExpData . nPcBangExperience / 2 : 0 ;
nVIPExp = ( ExpData . nVIPExperience > 0 ) ? ExpData . nVIPExperience / 2 : 0 ;
nPromoExp = ( ExpData . nPromotionExperience > 0 ) ? ExpData . nPromotionExperience / 2 : 0 ;
ExpData . nItemExperience = ( ExpData . nItemExperience > 0 ) ? ExpData . nItemExperience / 2 : 0 ;
ExpData . nGuildExp = ( ExpData . nGuildExp > 0 ) ? ExpData . nGuildExp / 2 : 0 ;
}
else if ( m_pSession - > GetFCMState ( ) = = FCMSTATE_ZERO ) {
nExp = 0 ;
nEventExp = 0 ;
nPCBangExp = 0 ;
nVIPExp = 0 ;
nPromoExp = 0 ;
ExpData . nItemExperience = 0 ;
ExpData . nGuildExp = 0 ;
}
# endif // _CH
nExp + = ExpData . nItemExperience ;
nExp + = ExpData . nGuildExp ;
# if defined(PRE_ADD_WEEKLYEVENT)
if ( CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapType ( ) ! = EWorldEnum : : MapSubTypeNest ) {
int nThreadID = GetGameRoom ( ) - > GetServerID ( ) ;
float fEventValue = g_pDataManager - > GetWeeklyEventValuef ( WeeklyEvent : : Player , GetClassID ( ) , WeeklyEvent : : Event_5 , nThreadID ) ;
if ( fEventValue ! = 0 )
nExp + = ( int ) ( nExp * fEventValue ) ;
}
# endif // #if defined(PRE_ADD_WEEKLYEVENT)
int nPrevLevel = GetLevel ( ) ;
int nTotalExp = nExp + nEventExp + nPCBangExp + nVIPExp + nPromoExp ;
AddExperience ( nTotalExp , nLogCode , biFKey ) ; //_KR<4B> <52> <20> ƴϸ<C6B4> pcbangexp<78> <70> <20> <EFBFBD> 0<> ̴<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǹ<EFBFBD> <C7B9> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Դϴ<D4B4> .
if ( GetLevel ( ) = = nPrevLevel ) {
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & m_nExperience , sizeof ( int ) ) ;
Stream . Write ( & nExp , sizeof ( int ) ) ;
Stream . Write ( & nEventExp , sizeof ( int ) ) ;
Stream . Write ( & nPCBangExp , sizeof ( int ) ) ;
# if defined(PRE_ADD_VIP)
Stream . Write ( & nVIPExp , sizeof ( int ) ) ;
# endif // #if defined(PRE_ADD_VIP)
Stream . Write ( & nPromoExp , sizeof ( int ) ) ;
# if defined( PRE_USA_FATIGUE )
Stream . Write ( & iPwrExp , sizeof ( int ) ) ;
# endif // #if defined( PRE_USA_FATIGUE )
Send ( eActor : : SC_ADDEXP , GetMySmartPtr ( ) , & Stream ) ;
}
}
void CDnPlayerActor : : CmdAddCoin ( INT64 nCoin , int nLogCode , int nFKey , bool bSync )
{
INT64 nChangeCoin = nCoin ;
# if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
if ( nLogCode = = DBDNWorldDef : : CoinChangeCode : : PickUp )
{
float fIncGoldRate = 0.0f ;
if ( IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_266 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_266 , vlBlows ) ;
{
int nCount = ( int ) vlBlows . size ( ) ;
for ( int i = 0 ; i < nCount ; + + i )
{
DnBlowHandle hBlow = vlBlows [ i ] ;
if ( hBlow & & hBlow - > IsEnd ( ) = = false )
{
fIncGoldRate + = hBlow - > GetFloatValue ( ) ;
}
}
}
nChangeCoin + = ( INT64 ) ( nChangeCoin * fIncGoldRate ) ;
if ( ! m_pSession - > CheckMaxCoin ( nChangeCoin ) )
return ;
}
}
# endif
# if defined(_CH)
if ( m_pSession - > GetFCMState ( ) = = FCMSTATE_HALF ) {
nChangeCoin = nCoin / 2 ;
}
else if ( m_pSession - > GetFCMState ( ) = = FCMSTATE_ZERO ) {
nChangeCoin = 0 ;
}
# endif // _CH
# if defined( _GAMESERVER )
if ( nLogCode ! = DBDNWorldDef : : CoinChangeCode : : PickUp )
g_Log . Log ( LogType : : _ERROR , m_pSession , L " CmdAddCoin PrevCoin=%I64d ChangeCoin=%I64d PickUpCoint=%I64d LogType=%d \r \n " , m_pSession - > GetCoin ( ) , nChangeCoin , m_pSession - > GetPickUpCoin ( ) , nLogCode ) ;
# endif
if ( nLogCode = = DBDNWorldDef : : CoinChangeCode : : PickUp )
{
m_pSession - > AddPickUpCoin ( nChangeCoin ) ;
# if defined( _WORK )
std : : cout < < nCoin < < " Coin ȹ<> <C8B9> => <20> <> " < < m_pSession - > GetPickUpCoin ( ) < < " Coin " < < std : : endl ;
# endif // #if defined( _WORK )
nLogCode = 0 ; // DB<44> <42> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> ʱ<EFBFBD> ȭ
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> !! bSync <20> <> AddCoin <20> <> bWarehouse <20> <> Ʋ<> <C6B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¶<> <C2B6> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,<2C> Ⱥ<EFBFBD> <C8BA> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .<2E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 쾾 -> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> Send<6E> <64> ... <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( m_pSession & & m_pSession - > GetItem ( ) ) {
if ( nChangeCoin > 0 )
m_pSession - > AddCoin ( nChangeCoin , nLogCode , nFKey , bSync ) ;
else if ( nChangeCoin < 0 )
m_pSession - > DelCoin ( - nChangeCoin , nLogCode , nFKey , bSync ) ;
}
}
void CDnPlayerActor : : OnDispatchMessage ( CDNUserSession * pSession , DWORD dwActorProtocol , BYTE * pPacket )
{
switch ( dwActorProtocol ) {
case eActor : : CS_CMDMOVE :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
int nActionIndex ;
EtVector3 vPos , vXVec ;
EtVector2 vZVec , vLook ;
char cFlag ;
DWORD dwGap ;
int nMoveSpeed ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & nActionIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_SHORT ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & cFlag , sizeof ( char ) ) ;
Stream . Read ( & nMoveSpeed , sizeof ( int ) ) ;
ActionElementStruct * pStruct = GetElement ( nActionIndex ) ;
if ( pStruct = = NULL ) break ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
# ifdef PRE_ADD_CHECK_MOVESPEED_HACK
m_pPlayerSpeedHackChecker - > OnSyncMoveSpeed ( nMoveSpeed ) ;
# endif
if ( CheckSkillAction ( pStruct - > szName . c_str ( ) ) = = true )
{
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
break ;
}
Look ( vLook , false ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
SetPosition ( vPos ) ;
// SetMagnetPosition( vPos );
# ifdef _USE_VOICECHAT
m_nVoiceRotate = ( int ) EtToDegree ( acos ( EtVec2Dot ( & EtVector2 ( 0.f , 1.f ) , & vZVec ) ) ) ;
if ( vZVec . x > 0.0f )
m_nVoiceRotate = 360 - m_nVoiceRotate ;
m_nVoiceRotate = ( m_nVoiceRotate + 90 ) % 360 ;
m_pSession - > SetVoicePos ( ( int ) vPos . x , ( int ) vPos . y , ( int ) vPos . z , m_nVoiceRotate ) ;
# endif
m_cMovePushKeyFlag = cFlag ;
float fXSpeed = 0.f , fZSpeed = 0.f ;
if ( cFlag & 0x01 ) fXSpeed = - 100000.f ;
if ( cFlag & 0x02 ) fXSpeed = 100000.f ;
if ( cFlag & 0x04 ) fZSpeed = 100000.f ;
if ( cFlag & 0x08 ) fZSpeed = - 100000.f ;
vPos + = ( vXVec * fXSpeed ) ;
vPos + = ( EtVec2toVec3 ( vZVec ) * fZSpeed ) ;
CmdMove ( vPos , pStruct ? pStruct - > szName . c_str ( ) : " " , - 1 , 8.f ) ;
}
break ;
case eActor : : CS_CMDSTOP :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
DWORD dwGap ;
bool bReset , bForce ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & bReset , sizeof ( bool ) ) ;
Stream . Read ( & bForce , sizeof ( bool ) ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
/*
std : : string szActionName = GetCurrentAction ( ) ;
if ( EtVec2Length ( & ( EtVector2 ( vPos . x , vPos . z ) - EtVector2 ( GetPosition ( ) - > x , GetPosition ( ) - > z ) ) ) > 100.f ) {
if ( GetState ( ) ! = ActorStateEnum : : Move ) szActionName = " Move_Front " ;
}
CmdMove ( vPos , szActionName . c_str ( ) , - 1 , CDnActionBase : : m_fQueueBlendFrame ) ;
*/
if ( IsProcessSkill ( ) & & bForce ) CancelUsingSkill ( ) ;
SetPosition ( vPos ) ;
OnStop ( vPos ) ;
# ifdef _USE_VOICECHAT
m_pSession - > SetVoicePos ( ( int ) vPos . x , ( int ) vPos . y , ( int ) vPos . z , m_nVoiceRotate ) ;
# endif
}
break ;
case eActor : : CS_CMDACTION :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
int nActionIndex , nLoopCount ;
float fBlendFrame ;
EtVector3 vXVec , vPos ;
EtVector2 vLook , vZVec ;
DWORD dwGap ;
bool bFromStateBlow = false ;
bool bSkillChain = false ;
Stream . Read ( & nActionIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_SHORT ) ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & nLoopCount , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & fBlendFrame , sizeof ( float ) , CPacketCompressStream : : FLOAT_SHORT , 10.f ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & m_cMovePushKeyFlag , sizeof ( char ) ) ;
Stream . Read ( & bFromStateBlow , sizeof ( bool ) ) ;
Stream . Read ( & bSkillChain , sizeof ( bool ) ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
ResetMove ( ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
Look ( vLook ) ;
SetMagnetPosition ( vPos ) ;
ActionElementStruct * pStruct = GetElement ( nActionIndex ) ;
if ( pStruct = = NULL ) break ;
if ( bSkillChain )
{
if ( false = = IsValidSkillChain ( GetCurrentActionIndex ( ) , nActionIndex ) )
return ;
}
else
{
bool bCheckStandAction = CDnChangeStandActionBlow : : CheckUsableAction ( GetActorHandle ( ) , true , pStruct - > szName . c_str ( ) ) ;
if ( IsProcessSkill ( ) = = true & & CheckSkillAction ( pStruct - > szName . c_str ( ) ) = = true | | bCheckStandAction = = false )
{
ActionElementStruct * pCurrentActionElement = GetElement ( GetCurrentActionIndex ( ) ) ;
if ( pCurrentActionElement )
{
bool bCorrectInputAction = false ;
for ( DWORD iSignal = 0 ; iSignal < pCurrentActionElement - > pVecSignalList . size ( ) ; + + iSignal )
{
CEtActionSignal * pSignal = pCurrentActionElement - > pVecSignalList . at ( iSignal ) ;
if ( STE_Input = = pSignal - > GetSignalIndex ( ) )
{
InputStruct * pInputStruct = ( InputStruct * ) ( pSignal - > GetData ( ) ) ;
if ( strcmp ( pInputStruct - > szChangeAction , pStruct - > szName . c_str ( ) ) = = NULL )
{
bCorrectInputAction = true ;
break ;
}
}
}
if ( bCorrectInputAction = = false )
{
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
return ;
}
}
}
}
if ( m_pBasicAttackInfo & & strstr ( pStruct - > szName . c_str ( ) , " Attack " ) )
{
DNVector ( int ) nVecCheckActionList ;
nVecCheckActionList . push_back ( GetCurrentActionIndex ( ) ) ;
if ( IsCustomAction ( ) )
nVecCheckActionList . push_back ( GetCustomActionIndex ( ) ) ;
// next <20> <EFBFBD> <D7BC> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> 쿣 10 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ΰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> next action <20> <> <EFBFBD> <EFBFBD> stand <20> <> <EFBFBD> Ƴ<EFBFBD> <C6B3> <EFBFBD> <20> Է<EFBFBD> <20> ް<EFBFBD> <20> ص<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// next <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵǾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ֵǴ<D6B5> <20> <> <EFBFBD> 찡 <20> ִ<EFBFBD> .
ActionElementStruct * pCurrentActionElement = GetElement ( GetCurrentActionIndex ( ) ) ;
if ( pCurrentActionElement )
{
if ( 0 < pCurrentActionElement - > szNextActionName . length ( ) )
{
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <EFBFBD> <EEB6BB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <CFB4> Ŀ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ<> <C4BF> <20> <> <20> ־ <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> .
//if( pCurrentActionElement->dwLength - (DWORD)CDnActionBase::m_fFrame < 10 )
{
int iNextActionIndex = GetElementIndex ( pCurrentActionElement - > szNextActionName . c_str ( ) ) ;
if ( - 1 < iNextActionIndex )
nVecCheckActionList . push_back ( iNextActionIndex ) ;
}
}
}
// cmdaction <20> <> <EFBFBD> <EFBFBD> <20> <> Ÿ <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> ̵<EFBFBD> <20> <> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <EFBFBD> ν <EFBFBD> <20> ⺻<EFBFBD> <E2BABB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> cmdaction <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> κ<EFBFBD> <CEBA> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> ϴ<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> Ʒ <EFBFBD> mixedaction <20> <> <20> <> <EFBFBD> Ƿ<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> ش<EFBFBD> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ƾ<EFBFBD> <20> Ѵ <EFBFBD> .
bool bValid = false ;
for ( DWORD k = 0 ; k < nVecCheckActionList . size ( ) ; k + + )
{
map < int , vector < CDnActionSpecificInfo : : S_BASIC_ATTACK_INPUT_SIGNAL_INFO > > : : const_iterator iter = m_pBasicAttackInfo - > mapBasicAttackInfo . find ( nVecCheckActionList [ k ] ) ;
if ( iter ! = m_pBasicAttackInfo - > mapBasicAttackInfo . end ( ) )
{
const vector < CDnActionSpecificInfo : : S_BASIC_ATTACK_INPUT_SIGNAL_INFO > & vlInputSignals = iter - > second ;
for ( int i = 0 ; i < ( int ) vlInputSignals . size ( ) ; + + i )
{
const CDnActionSpecificInfo : : S_BASIC_ATTACK_INPUT_SIGNAL_INFO & InputSignalInfo = vlInputSignals . at ( i ) ;
if ( strstr ( pStruct - > szName . c_str ( ) , InputSignalInfo . strChangeActionName . c_str ( ) ) )
{
bValid = true ;
break ;
}
}
}
}
if ( ! bValid )
{
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
return ;
}
}
// <20> Ϲ <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Dz <20> ñ׳ <C3B1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> üũ.
if ( m_pProjectileCountInfo ) {
map < int , DWORD > : : const_iterator iterCooltime = m_pProjectileCountInfo - > mapBasicShootActionCoolTime . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapBasicShootActionCoolTime . end ( ) ! = iterCooltime )
{
DWORD dwTerm = timeGetTime ( ) - m_dwLastBasicShootActionTime ;
DWORD dwCoolTime = DWORD ( ( float ) m_dwLastBasicShootCoolTime / m_fFrameSpeed ) ;
if ( dwTerm < dwCoolTime )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ϸ<EFBFBD> <20> Ϲ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> Դϴ<D4B4> ..
# ifndef _FINAL_BUILD
OutputDebug ( " CDnPlayerActor-CS_CMDACTION: <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ϸ<EFBFBD> <20> Ϲ <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> . \n " ) ;
# endif // #ifndef _FINAL_BUILD
return ;
}
m_dwLastBasicShootActionTime = timeGetTime ( ) ;
m_dwLastBasicShootCoolTime = iterCooltime - > second ;
}
}
if ( IsCustomAction ( ) ) ResetCustomAction ( ) ;
// <20> <> ų ä<> <C3A4> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> cmdaction <20> <> Ŷ<EFBFBD> <C5B6> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> . #26467
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų ü<> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ñ׳ <C3B1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 帧<EFBFBD> <E5B8A7> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ƚ<EFBFBD> <C8BD> ϰ<EFBFBD> Ȯ<> <C8AE> <EFBFBD> ϸ<EFBFBD> <20> ȴ<EFBFBD> .
if ( false = = bSkillChain )
_CheckProcessSkillActioncChange ( pStruct - > szName . c_str ( ) ) ;
CmdAction ( pStruct - > szName . c_str ( ) , nLoopCount , fBlendFrame , false , false , bSkillChain ) ;
// CS_CMDACTION <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
_UpdateMaxProjectileCount ( nActionIndex ) ;
m_bUpdatedProjectileInfoFromCmdAction = true ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <20> <> <20> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <EFBFBD> <DFBB> <EFBFBD> Ų <20> <EFBFBD> .
if ( bFromStateBlow )
m_pStateBlow - > OnCmdActionFromPacket ( pStruct - > szName . c_str ( ) ) ;
//
# ifdef _USE_VOICECHAT
m_nVoiceRotate = ( int ) EtToDegree ( acos ( EtVec2Dot ( & EtVector2 ( 0.f , 1.f ) , & vZVec ) ) ) ;
if ( vZVec . x > 0.0f )
m_nVoiceRotate = 360 - m_nVoiceRotate ;
m_nVoiceRotate = ( m_nVoiceRotate + 90 ) % 360 ;
m_pSession - > SetVoicePos ( ( int ) vPos . x , ( int ) vPos . y , ( int ) vPos . z , m_nVoiceRotate ) ;
# endif
}
break ;
case eActor : : CS_CMDMIXEDACTION :
{
// Note: <20> <> Ƽ <EFBFBD> <C6BC> <20> нú<D0BD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> ߿<EFBFBD> <20> Ϲ <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ϰ<EFBFBD> <20> ȴٸ<C8B4> üũ<C3BC> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> Ų<EFBFBD> <C5B2> .
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ƽ <EFBFBD> <20> Ϲ <EFBFBD> <20> <> <EFBFBD> ݿ<EFBFBD> <DDBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> .
if ( IsProcessSkill ( ) )
{
if ( ( m_hProcessSkill - > GetSkillType ( ) = = CDnSkill : : Passive | | m_hProcessSkill - > GetSkillType ( ) = = CDnSkill : : AutoPassive ) & &
m_hProcessSkill - > GetDurationType ( ) = = CDnSkill : : Instantly )
{
m_hProcessSkill - > OnEnd ( CDnActionBase : : m_LocalTime , 0.f ) ;
m_hProcessSkill . Identity ( ) ;
}
}
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
int nActionIndex , nMaintenanceBone , nActionBone ;
float fFrame , fBlendFrame ;
EtVector3 vLook ;
DWORD dwGap ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & nActionIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_SHORT ) ;
Stream . Read ( & nActionBone , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & nMaintenanceBone , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & fFrame , sizeof ( float ) , CPacketCompressStream : : FLOAT_SHORT , 10.f ) ;
Stream . Read ( & fBlendFrame , sizeof ( float ) , CPacketCompressStream : : FLOAT_SHORT , 10.f ) ;
Stream . Read ( & m_cMovePushKeyFlag , sizeof ( char ) ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
ActionElementStruct * pStruct = GetElement ( nActionIndex ) ;
if ( pStruct = = NULL ) break ;
// <20> ⺻<EFBFBD> <E2BABB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> cmdaction <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ƿ<EFBFBD> <C6BF> <EFBFBD> Skill_ <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> ߸<EFBFBD> <DFB8> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> . (<28> <> ų ü<> <C3BC> <20> Է<EFBFBD> <D4B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> )
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( CheckSkillAction ( pStruct - > szName . c_str ( ) ) = = true )
{
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
break ;
}
bool bCheckStandAction = CDnChangeStandActionBlow : : CheckUsableAction ( GetActorHandle ( ) , true , pStruct - > szName . c_str ( ) ) ;
if ( bCheckStandAction = = false )
{
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
return ;
}
// <20> Ϲ <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Dz <20> ñ׳ <C3B1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> üũ.
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> (0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ŷ <20> ´ <EFBFBD> .)<29> <> <EFBFBD> <EFBFBD> <20> ⺻ <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> 0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> <> Ÿ<EFBFBD> ӿ<EFBFBD> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> , 0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ٸ<EFBFBD>
// <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ <20> ٰ<EFBFBD> <D9B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> . <20> <> <20> ڷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> ȿ<EFBFBD> <C8BF> <20> ȴ<EFBFBD> ..
// cmdaction <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϲ Ƿ<CFB9> MIXEDACTION <20> <> Ŭ<> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ϸ<EFBFBD> <20> ȴ<EFBFBD> .
bool bActionCoolTimeChecked = false ;
if ( m_pProjectileCountInfo )
{
map < int , DWORD > : : const_iterator iterCooltime = m_pProjectileCountInfo - > mapBasicShootActionCoolTime . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapBasicShootActionCoolTime . end ( ) ! = iterCooltime )
{
if ( 0.0f = = fFrame )
{
DWORD dwTerm = timeGetTime ( ) - m_dwLastBasicShootActionTime ;
DWORD dwCoolTime = DWORD ( ( float ) m_dwLastBasicShootCoolTime / m_fFrameSpeed ) ;
if ( dwTerm < dwCoolTime )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ϸ<EFBFBD> <20> Ϲ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> Դϴ<D4B4> ..
# ifndef _FINAL_BUILD
OutputDebug ( " CDnPlayerActor-CS_CMDMIXEDACTION: <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ϸ<EFBFBD> <20> Ϲ <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> . \n " ) ;
# endif // #ifndef _FINAL_BUILD
return ;
}
m_dwLastBasicShootActionTime = timeGetTime ( ) ;
m_dwLastBasicShootCoolTime = iterCooltime - > second ;
bActionCoolTimeChecked = true ;
}
}
}
if ( false = = bActionCoolTimeChecked )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ <20> <> <20> <> <20> ϰ<EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> hit <20> ñ׳ <C3B1> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> hit <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ־<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> ߰<EFBFBD> CmdStop <20> ̳<EFBFBD> CmdMove <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Stand <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ鼭 MixedAction <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> Ѵ <EFBFBD> ..
LOCAL_TIME MixedActionCoolTime = 500 ;
if ( CDnActionBase : : m_LocalTime - m_MixedActionTimeStamp < MixedActionCoolTime )
{
if ( CDnActionBase : : m_LocalTime - m_MixedActionTimeStamp < 0 )
m_MixedActionTimeStamp = CDnActionBase : : m_LocalTime ;
// <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> .
return ;
}
m_MixedActionTimeStamp = CDnActionBase : : m_LocalTime ;
}
std : : string szAction = pStruct - > szName ;
m_szActionBoneName = GetBoneName ( nActionBone ) ;
m_szMaintenanceBoneName = GetBoneName ( nMaintenanceBone ) ;
if ( IsCustomAction ( ) ) ResetCustomAction ( ) ;
SetCustomAction ( szAction . c_str ( ) , fFrame ) ;
// MixedAction <20> <> OnChangeAction() <20> Լ<EFBFBD> <D4BC> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> ȵǹǷ<C7B9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ־<EFBFBD> <D6BE> <EFBFBD> <20> <> .
//_UpdateMaxProjectileCount( nActionIndex, true );
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 0 <20> <> <20> ƴϸ<C6B4> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> <EFBFBD> ⸸ <20> ٲ<EFBFBD> <D9B2> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( 0.0f = = fFrame )
{
_UpdateMaxProjectileCount ( nActionIndex ) ;
}
}
break ;
case eActor : : CS_PROJECTILE :
{
// next <20> <EFBFBD> <D7BC> <EFBFBD> <20> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӿ<EFBFBD> <20> ٴٶ<D9B4> <D9B6> <EFBFBD> <20> <> <EFBFBD> 쿣 <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9> Ŭ<> <EFBFBD>
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ㼭 <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> . <20> ѹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> ó<EFBFBD> <C3B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> loop <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> ִ<EFBFBD> .
# ifdef PRE_ADD_LOOP_PROJECTILE
ActionElementStruct * pActionElement = GetElement ( m_szAction . c_str ( ) ) ;
if ( pActionElement & & false = = pActionElement - > szNextActionName . empty ( ) )
{
// TODO: <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> IsCustomAction() <20> <> <EFBFBD> <EFBFBD> mixed <20> ִϸ<D6B4> <CFB8> ̼<EFBFBD> <CCBC> <EFBFBD> üũ<C3BC> ؼ<EFBFBD>
// <20> <> Ȯ<EFBFBD> ϰ<EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ش<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <20> ̷<EFBFBD> <CCB7> Ը<EFBFBD> <20> صθ<D8B5> <20> ڷ<EFBFBD> <20> <> <EFBFBD> 鼭
// ȭ<> <C8AD> <20> <> <EFBFBD> <EFBFBD> Move_Back <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> Ǿ<EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0 <20> <> <20> <> .
int iNextActionElementIndex = GetElementIndex ( pActionElement - > szNextActionName . c_str ( ) ) ;
if ( GetCurrentActionIndex ( ) = = iNextActionElementIndex )
_UpdateMaxProjectileCount ( iNextActionElementIndex ) ;
}
# endif // #ifdef PRE_ADD_LOOP_PROJECTILE
CDnProjectile * pProjectile = CDnProjectile : : CreatePlayerProjectileFromClientPacket ( GetMySmartPtr ( ) , pPacket ) ;
}
break ;
case eActor : : CS_CMDLOOK :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector2 vLook , vZVec ;
EtVector3 vXVec ;
bool bForce ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & bForce , sizeof ( bool ) ) ;
Look ( vLook , bForce ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
}
break ;
case eActor : : CS_USESKILL :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
int nSkillTableID = 0 ;
int nEnchantSkillID = 0 ; // #38294 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ex <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˷<EFBFBD> <CBB7> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> 뵵.
BYTE cLevel ;
EtVector2 vLook , vZVec ;
EtVector3 vXVec ;
# ifdef PRE_ADD_POSITION_SYNC_BY_SKILL_USAGE
EtVector3 vPos ;
# endif
bool bUseApplySkillItem = false ;
bool bAutoUseFromServer = false ; // <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
Stream . Read ( & nSkillTableID , sizeof ( int ) ) ;
Stream . Read ( & cLevel , sizeof ( char ) ) ;
Stream . Read ( & bUseApplySkillItem , sizeof ( bool ) ) ;
Stream . Read ( m_abSignalSkillCheck , sizeof ( m_abSignalSkillCheck ) ) ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & bAutoUseFromServer , sizeof ( bool ) ) ;
Stream . Read ( & nEnchantSkillID , sizeof ( int ) ) ;
# ifdef PRE_ADD_POSITION_SYNC_BY_SKILL_USAGE
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
SetPosition ( vPos ) ;
# endif
Look ( vLook , true ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̾ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> CanMove <20> <> false <20> <> <20> <> <EFBFBD> 찡 <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִµ<D6B4>
// <20> ̷<EFBFBD> <20> <> <EFBFBD> 쿣 Movable <20> <> <20> <> ų <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɾ<EFBFBD> <C9BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> true <20> <> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> .
// <20> ̹<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <20> <> Ȳ<EFBFBD> ̴<EFBFBD> . (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) #14127
if ( false = = m_bMovable )
m_bMovable = true ;
////////////////////////////////////////////////////////////////////////////////////////////////////
// Note: <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ApplySkill<6C> <6C> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> ó<> <C3B3> <EFBFBD> մϴ<D5B4> ..
// <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⼱ <20> <> <EFBFBD> <EFBFBD> . <20> ٸ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> 鿡<EFBFBD> <E9BFA1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <EFBFBD> Դϴ<D4B4> .
if ( false = = bUseApplySkillItem )
{
bool bSkipAirCondition = false ;
if ( CheckSkipAirCondition ( nSkillTableID ) )
{
SetSignalSkillCheck ( 2 , true ) ;
bSkipAirCondition = true ;
}
// <20> <> <EFBFBD> °<EFBFBD> Air<69> ΰ<EFBFBD> <CEB0> 쿡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <D7BC> <EFBFBD> GroundMovable <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Air üũ<C3BC> <C5A9> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <20> <> <EFBFBD> ҵǴ<D2B5> <20> <> <EFBFBD> 찡 <20> ִ<EFBFBD> .
m_bUseSignalSkillCheck = ( m_abSignalSkillCheck [ 0 ] | | m_abSignalSkillCheck [ 1 ] | | m_abSignalSkillCheck [ 2 ] ) ;
if ( m_hProcessSkill )
{
// #25154 <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> onend <20> ȴ<EFBFBD> .
if ( false = = m_hProcessSkill - > IsAuraOn ( ) )
{
m_hProcessSkill - > OnEnd ( CDnActionBase : : m_LocalTime , 0.f ) ;
}
else
{
// #26002 <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ŷ<EFBFBD> <C5B6> <EFBFBD> <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> 쵵<EFBFBD> <ECB5B5> <20> Ѵ <EFBFBD> .
// <20> ȱ<C8B1> <D7B7> <EFBFBD> <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> ApplyStateEffect <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> ǵ<EFBFBD> <C7B5> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> ǰݽ<C7B0> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵǰ<C8B5> <20> ϴ<EFBFBD> <20> <> <EFBFBD> ̹Ƿ<CCB9> ,
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD>
// <20> 翬<EFBFBD> <E7BFAC> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ȵǰ<C8B5> <20> ǹǷ<C7B9> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> ̺κ<CCBA> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ִٴ<D6B4> <20> <> <EFBFBD> <EFBFBD> <20> Ͽ<EFBFBD> <20> ̷<EFBFBD> <CCB7> <EFBFBD> ó<> <C3B3> <EFBFBD> Ѵ <EFBFBD> .
if ( IsEnabledAuraSkill ( ) )
ClearSelfStateSignalBlowQueue ( ) ;
}
m_hProcessSkill . Identity ( ) ;
}
if ( GetActorHandle ( ) & & GetActorHandle ( ) - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_345 ) ) //rlkt_mechanicMODE
{
if ( IsExistSkill ( nSkillTableID , cLevel ) = = false )
AddSkill ( nSkillTableID , cLevel ) ;
}
if ( IsExistSkill ( nSkillTableID , cLevel ) = = false ) {
( ( CDnPlayerSkillChecker * ) m_pPlayerSkillChecker ) - > OnInvalidUseSkill ( nSkillTableID , CDnSkill : : UsingResult : : NoExistSkill ) ;
// Hack!!!
break ;
}
# if defined( PRE_FIX_CHANGESTAND_HACK )
CDnChangeStandActionBlow : : ReleaseStandChangeSkill ( GetActorHandle ( ) , true ) ;
# endif
CDnSkill : : UsingResult eResult = UseSkill ( nSkillTableID ) ;
if ( eResult ! = CDnSkill : : UsingResult : : Success )
{
// <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> е Ǹ<D0B5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ·<EFBFBD> <20> Ǵ<EFBFBD> <C7B4> Ͽ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뺸.
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ <20> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ½<EFBFBD> Ų<EFBFBD> <C5B2> .
( ( CDnPlayerSkillChecker * ) m_pPlayerSkillChecker ) - > OnInvalidUseSkill ( nSkillTableID , eResult ) ;
switch ( eResult )
{
case CDnSkill : : FailedByCooltime :
break ;
case CDnSkill : : FailedByUsableChecker :
{
# ifdef PRE_FIX_69469
if ( GetProcessSkill ( ) ) CancelUsingSkill ( ) ;
SetAction ( " Stand " , 0.f , 3.f ) ;
# endif
const char * pCurrentAction = GetCurrentAction ( ) ;
int iCurrentActionIndex = GetElementIndex ( pCurrentAction ) ;
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream LocalStream ( pBuffer , 32 ) ;
LocalStream . Write ( & nSkillTableID , sizeof ( int ) ) ;
LocalStream . Write ( & eResult , sizeof ( CDnSkill : : UsingResult ) ) ;
LocalStream . Write ( & iCurrentActionIndex , sizeof ( int ) ) ;
Send ( eActor : : SC_SKILLUSING_FAILED , & LocalStream ) ;
}
break ;
}
}
if ( bSkipAirCondition )
SetSignalSkillCheck ( 2 , false ) ; // <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> ,
if ( m_hProcessSkill & & m_hProcessSkill - > IsEquipItemSkill ( ) )
{
m_afLastEquipItemSkillDelayTime = m_hProcessSkill - > GetDelayTime ( ) ;
m_afLastEquipItemSkillRemainTime = m_hProcessSkill - > GetElapsedDelayTime ( ) ;
}
m_bUseSignalSkillCheck = false ;
ZeroMemory ( m_abSignalSkillCheck , sizeof ( m_abSignalSkillCheck ) ) ;
}
}
break ;
case eActor : : CS_VIEWSYNC :
{
if ( GetGameRoom ( ) & & GetGameRoom ( ) - > GetGameTask ( ) & & ! GetGameRoom ( ) - > GetGameTask ( ) - > IsSyncComplete ( ) ) break ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos , vXVec ;
EtVector2 vZVec , vLook ;
DWORD dwGap ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
Look ( vLook , false ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
SetPosition ( vPos ) ;
// SetMagnetPosition( vPos );
}
break ;
case eActor : : CS_CMDTOGGLEBATTLE :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
bool bBattle ;
Stream . Read ( & bBattle , sizeof ( bool ) ) ;
CmdToggleBattle ( bBattle ) ;
}
break ;
case eActor : : CS_CMDPASSIVESKILLACTION :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
int nActionIndex , nLoopCount , nSkillID ;
BYTE cLevel ;
float fBlendFrame ;
float fStartFrame ;
EtVector3 vXVec , vPos ;
EtVector2 vLook , vZVec ;
bool bChargeKey = false ;
Stream . Read ( & nSkillID , sizeof ( int ) ) ;
Stream . Read ( & cLevel , sizeof ( char ) ) ;
Stream . Read ( & nActionIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_SHORT ) ;
Stream . Read ( & nLoopCount , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & fBlendFrame , sizeof ( float ) , CPacketCompressStream : : FLOAT_SHORT , 10.f ) ;
Stream . Read ( & fStartFrame , sizeof ( float ) , CPacketCompressStream : : FLOAT_SHORT , 10.0f ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Read ( & m_cMovePushKeyFlag , sizeof ( char ) ) ;
Stream . Read ( & bChargeKey , sizeof ( bool ) ) ;
bool bOnlyCheck = false ;
Stream . Read ( & bOnlyCheck , sizeof ( bool ) ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
ResetMove ( ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
Look ( vLook ) ;
//SetMagnetPosition( vPos );
SetPosition ( vPos ) ;
ActionElementStruct * pStruct = GetElement ( nActionIndex ) ;
if ( pStruct = = NULL )
{
// Hack!!
break ;
}
// <20> <> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> Ŀ<> <C4BF> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> Ϲ Ƿ<CFB9> <20> <> <20> <> <20> Ʒ <EFBFBD> <C6B7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> .
//if( IsCustomAction() ) ResetCustomAction();
// Tumble <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Move <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϱ <C6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> <> üũ<C3BC> <C5A9> <20> ɷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵȴ<C8B5> .
// Tumble <20> <EFBFBD> <20> <> û<EFBFBD> <C3BB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Stand <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// CMDSTOP <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̴<EFBFBD> . Tumble <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> Move <20> ǿ<D7BC> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> üũ<C3BC> <C5A9> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ȴ<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ν <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <C7B4> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> κ<EFBFBD> <CEBA> ̹Ƿ<CCB9> Tumble <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų<EFBFBD> <C5B2> .
// <20> ٸ<EFBFBD> Ŭ<> <EFBFBD> <20> <> skillid <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> Tumble <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> õ<EFBFBD> <20> нú<D0BD> <20> <> ų id <20> <> <20> ٲ㼭
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> . <20> <EFBFBD> <D7B7> <EFBFBD> , <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> ̳<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> δ<EFBFBD> CmdInputHasPassiveSkill <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ؼ<EFBFBD> <20> <> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> 쿣 <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ȴ<EFBFBD> .
int iCurrentActionIndex = GetCurrentActionIndex ( ) ;
vector < int > vlCheckActionIndices ;
vlCheckActionIndices . push_back ( iCurrentActionIndex ) ;
// #23245 <20> и<EFBFBD> <20> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <EFBFBD> ť<> <C5A5> <EFBFBD> <EFBFBD> <20> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<CCBE> <20> ̹<EFBFBD> <20> ٲ<EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> û<EFBFBD> <C3BB> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 찡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> queue <20> <> <20> DZ<D7BC> <C7B1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
int iQueuedActionIndex = - 1 ;
if ( false = = m_szActionQueue . empty ( ) )
{
iQueuedActionIndex = GetElementIndex ( m_szActionQueue . c_str ( ) ) ;
vlCheckActionIndices . push_back ( iQueuedActionIndex ) ;
}
// mixed action <20> <> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> ش<EFBFBD> <20> DZ<D7BC> <C7B1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( IsCustomAction ( ) )
{
int iCustomActionIndex = GetCustomActionIndex ( ) ;
vlCheckActionIndices . push_back ( iCustomActionIndex ) ;
ResetCustomAction ( ) ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> cmdstop <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> stand <20> <> <20> <> <EFBFBD> <EFBFBD> tumblehelper <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
bool bNowStand = ( 0 ! = strstr ( m_szAction . c_str ( ) , " Stand " ) ) ;
// <20> ̵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쵵 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> Move <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> tunble helper <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> ϴٰ<CFB4> <20> <> <EFBFBD> ٷ<EFBFBD> shift+<2B> <> <20> <> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뽬<EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 찡 <20> ־ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <20> <> <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> move <20> <EFBFBD> <20> ñ׳ ο <D7B3> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ʾ Ƽ <CABE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ֵǾ<D6B5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
bool bNowMove = IsMove ( ) ;
bool bValid = false ;
for ( int k = 0 ; k < ( int ) vlCheckActionIndices . size ( ) ; + + k )
{
int iCheckActionIndex = vlCheckActionIndices . at ( k ) ;
if ( bNowStand | | bNowMove )
{
map < int , int > : : iterator iterTumble = m_mapTumbleHelper . find ( nActionIndex ) ;
if ( m_mapTumbleHelper . end ( ) ! = iterTumble )
{
// <20> ƹ<EFBFBD> <20> ̵<EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> Tumble <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϲ Ƿ<CFB9> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ̰ɷ<CCB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ־<EFBFBD> <D6BE> <EFBFBD> Tumble <20> <> <20> <> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> valid <20> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
iCheckActionIndex = iterTumble - > second ;
}
}
if ( ! m_pPassiveSkillInfo | | ( m_pPassiveSkillInfo & & m_pPassiveSkillInfo - > mapPassiveSkillInfo . empty ( ) ) )
continue ;
// <20> 켱 <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> inputhaspassive <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> ִ<EFBFBD> <D6B4> <EFBFBD> Ȯ<> <C8AE> .
map < int , vector < CDnActionSpecificInfo : : S_PASSIVESKILL_SIGNAL_INFO > > : : const_iterator iter = m_pPassiveSkillInfo - > mapPassiveSkillInfo . find ( iCheckActionIndex ) ;
if ( m_pPassiveSkillInfo - > mapPassiveSkillInfo . end ( ) ! = iter )
{
const vector < CDnActionSpecificInfo : : S_PASSIVESKILL_SIGNAL_INFO > & vlPassiveSkillSignalInfos = iter - > second ;
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> Ȯ<EFBFBD> <C8AE> <20> <> ġ<EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> ش<EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> 켱<EFBFBD> ̰<EFBFBD> , <20> <> <EFBFBD> ڿ<EFBFBD> <20> <> <EFBFBD> ԵǴ<D4B5> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̴<EFBFBD> .
for ( int i = 0 ; i < ( int ) vlPassiveSkillSignalInfos . size ( ) ; + + i )
{
const CDnActionSpecificInfo : : S_PASSIVESKILL_SIGNAL_INFO & PassiveSkillInfo = vlPassiveSkillSignalInfos . at ( i ) ;
if ( PassiveSkillInfo . strChangeActionName = = pStruct - > szName | |
PassiveSkillInfo . strEXSkillChangeActionName = = pStruct - > szName )
{
// Ŭ<> <C5AC> <EFBFBD> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <20> <> û<EFBFBD> <C3BB> <20> ִ<EFBFBD> <20> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <20> <> <20> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <20> <> üũ<C3BC> Ѵ <EFBFBD> .
nSkillID = PassiveSkillInfo . iSkillID ;
if ( IsExistSkill ( PassiveSkillInfo . iSkillID ) )
{
// <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ<EFBFBD> <C8AD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> ; <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
DnSkillHandle hSkill = FindSkill ( PassiveSkillInfo . iSkillID ) ;
if ( hSkill - > IsEnchantedSkill ( ) )
{
if ( PassiveSkillInfo . strEXSkillChangeActionName = = pStruct - > szName )
bValid = true ;
}
else
bValid = true ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ΰ<EFBFBD> <CEB0> 쿣 <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( strstr ( pStruct - > szName . c_str ( ) , " ChargeShoot_ " ) )
{
if ( timeGetTime ( ) - m_dwLastChargeShootTime < 1500 )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> нú<D0BD> <20> <> ų <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bValid = false ;
}
else
m_dwLastChargeShootTime = timeGetTime ( ) ;
}
}
break ;
}
}
// <20> <> ġ<EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> ã<> <C3A3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( false = = bValid )
{
for ( int i = 0 ; i < ( int ) vlPassiveSkillSignalInfos . size ( ) ; + + i )
{
const CDnActionSpecificInfo : : S_PASSIVESKILL_SIGNAL_INFO & PassiveSkillInfo = vlPassiveSkillSignalInfos . at ( i ) ;
if ( strstr ( pStruct - > szName . c_str ( ) , PassiveSkillInfo . strChangeActionName . c_str ( ) ) ) // <20> Ҽ<EFBFBD> <D2BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> _Book, _Orb <20> ̷<EFBFBD> <CCB7> <EFBFBD> <20> ٱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Կ<EFBFBD> <D4BF> η<EFBFBD> üũ<C3BC> Ѵ <EFBFBD> .
{
// Ŭ<> <C5AC> <EFBFBD> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <20> <> û<EFBFBD> <C3BB> <20> ִ<EFBFBD> <20> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <20> <> <20> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <20> <> üũ<C3BC> Ѵ <EFBFBD> .
nSkillID = PassiveSkillInfo . iSkillID ;
if ( IsExistSkill ( PassiveSkillInfo . iSkillID ) )
{
// <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ<EFBFBD> <C8AD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> ; <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
DnSkillHandle hSkill = FindSkill ( PassiveSkillInfo . iSkillID ) ;
if ( hSkill - > IsEnchantedSkill ( ) )
{
if ( PassiveSkillInfo . strEXSkillChangeActionName = = pStruct - > szName )
bValid = true ;
}
else
bValid = true ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ΰ<EFBFBD> <CEB0> 쿣 <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( strstr ( pStruct - > szName . c_str ( ) , " ChargeShoot_ " ) )
{
if ( timeGetTime ( ) - m_dwLastChargeShootTime < 1500 )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> нú<D0BD> <20> <> ų <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bValid = false ;
}
else
m_dwLastChargeShootTime = timeGetTime ( ) ;
}
}
}
if ( bValid )
break ;
}
}
if ( bValid )
break ;
}
}
# if defined( PRE_FIX_CHANGESTAND_HACK )
CDnChangeStandActionBlow : : ReleaseStandChangeSkill ( GetActorHandle ( ) , true ) ;
# endif
if ( false = = bValid )
{
// Hack!! <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ,, <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų <20> ñ׳ ε鿡 <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϸ<EFBFBD> <20> <> .
// <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϸ<EFBFBD> <20> ϰų<CFB0> ..
// <20> <> <EFBFBD> ̴<EFBFBD> .
# ifdef PRE_FIX_SKILL_FAILED_BY_ACTION
# ifdef PRE_FIX_69469
if ( GetProcessSkill ( ) ) CancelUsingSkill ( ) ;
SetAction ( " Stand " , 0.f , 3.f ) ;
# endif
const char * pCurrentAction = GetCurrentAction ( ) ;
int iCurrentActionIndex = GetElementIndex ( pCurrentAction ) ;
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream LocalStream ( pBuffer , 32 ) ;
CDnSkill : : UsingResult eResult = CDnSkill : : FailedByInvailedAction ;
LocalStream . Write ( & nSkillID , sizeof ( int ) ) ;
LocalStream . Write ( & eResult , sizeof ( CDnSkill : : UsingResult ) ) ;
LocalStream . Write ( & iCurrentActionIndex , sizeof ( int ) ) ;
Send ( eActor : : SC_SKILLUSING_FAILED , & LocalStream ) ;
# endif
return ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> nLoopCount <20> <> fBlendFrame <20> ̳<EFBFBD> fStartFrame <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> Ǵµ<C7B4>
// <20> <> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ÿ<EFBFBD> <C3BF> <EFBFBD> <20> ñ׳ ο <D7B3> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
CmdPassiveSkillAction ( nSkillID , pStruct - > szName . c_str ( ) , nLoopCount , fBlendFrame , fStartFrame , bChargeKey , false , bOnlyCheck ) ;
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
}
break ;
case eActor : : CS_POSREV :
{
if ( GetGameRoom ( ) & & GetGameRoom ( ) - > GetGameTask ( ) & & ! GetGameRoom ( ) - > GetGameTask ( ) - > IsSyncComplete ( ) ) break ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
bool bMove ;
DWORD dwGap ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & bMove , sizeof ( bool ) ) ;
_ASSERT ( m_pPlayerSpeedHackChecker ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
SetPosition ( vPos ) ;
if ( bMove ) {
EtVector3 vXVec ;
EtVector2 vZVec ;
Stream . Read ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
EtVec3Cross ( & vXVec , & EtVector3 ( 0.f , 1.f , 0.f ) , & EtVec2toVec3 ( vZVec ) ) ;
SetMoveVectorX ( vXVec ) ;
SetMoveVectorZ ( EtVec2toVec3 ( vZVec ) ) ;
if ( EtVec3LengthSq ( GetMovePos ( ) ) > 0.f ) {
float fXSpeed = 0.f , fZSpeed = 0.f ;
if ( m_cMovePushKeyFlag & 0x01 ) fXSpeed = - 100000.f ;
if ( m_cMovePushKeyFlag & 0x02 ) fXSpeed = 100000.f ;
if ( m_cMovePushKeyFlag & 0x04 ) fZSpeed = 100000.f ;
if ( m_cMovePushKeyFlag & 0x08 ) fZSpeed = - 100000.f ;
vPos + = ( vXVec * fXSpeed ) ;
vPos + = ( EtVec2toVec3 ( vZVec ) * fZSpeed ) ;
MovePos ( vPos , false ) ;
}
}
}
break ;
case eActor : : CS_ONDROP :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
DWORD dwGap ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
_ASSERT ( m_pPlayerSpeedHackChecker ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
SetPosition ( vPos ) ;
SetJumpMovement ( EtVector2 ( 0.f , 0.f ) ) ;
}
break ;
case eActor : : CS_CMDREMOVESTATEEFFECT :
{
CPacketCompressStream Stream ( pPacket , 32 ) ;
STATE_BLOW : : emBLOW_INDEX emBlowIndex ;
Stream . Read ( & emBlowIndex , sizeof ( STATE_BLOW : : emBLOW_INDEX ) ) ;
// <20> ٸ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> 鿡<EFBFBD> Ե<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <EFBFBD> <20> <> û<EFBFBD> <C3BB> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> ˾ƾ<CBBE> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> ٽ<EFBFBD> <20> <> <EFBFBD> ε<EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <20> <> Ų<EFBFBD> <C5B2> . <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> û<EFBFBD> <C3BB> Ŭ<> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CmdRemoveStateEffect ( emBlowIndex ) ;
break ;
}
break ;
# if defined(PRE_FIX_57706)
case eActor : : CS_CMDREMOVESTATEEFFECTFROMID :
{
CPacketCompressStream Stream ( pPacket , 32 ) ;
int nServerBlowID = 0 ;
Stream . Read ( & nServerBlowID , sizeof ( int ) ) ;
//Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˰<EFBFBD> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//<2F> <> <EFBFBD> ε<EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> ٸ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> Ÿ<EFBFBD> <20> Ѵ <EFBFBD> .
CmdRemoveStateEffectFromID ( nServerBlowID ) ;
break ;
}
break ;
# endif // PRE_FIX_57706
case eActor : : CS_CMDTOGGLEWEAPONORDER :
{
CPacketCompressStream Stream ( pPacket , 32 ) ;
int nEquipIndex ;
bool bViewCash ;
Stream . Read ( & nEquipIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & bViewCash , sizeof ( bool ) ) ;
CmdToggleWeaponViewOrder ( nEquipIndex , bViewCash ) ;
}
break ;
case eActor : : CS_CMDTOGGLEPARTSORDER :
{
CPacketCompressStream Stream ( pPacket , 32 ) ;
int nEquipIndex ;
bool bViewCash ;
Stream . Read ( & nEquipIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & bViewCash , sizeof ( bool ) ) ;
if ( nEquipIndex = = HIDEHELMET_BITINDEX ) CmdToggleHideHelmet ( bViewCash ) ;
else CmdTogglePartsViewOrder ( nEquipIndex , bViewCash ) ;
if ( GetUserSession ( ) & & GetUserSession ( ) - > GetPartyID ( ) > 0 ) {
if ( nEquipIndex = = CASHEQUIP_HELMET | | nEquipIndex = = CASHEQUIP_EARRING | | nEquipIndex = = HIDEHELMET_BITINDEX ) {
for ( DWORD i = 0 ; i < m_pSession - > GetGameRoom ( ) - > GetUserCount ( ) ; i + + ) {
CDNGameRoom : : PartyStruct * pStruct = m_pSession - > GetGameRoom ( ) - > GetPartyData ( i ) ;
if ( pStruct = = NULL ) continue ;
pStruct - > pSession - > SendPartyMemberPart ( m_pSession ) ;
}
}
}
}
break ;
case eActor : : CS_CMDPICKUPITEM :
{
if ( IsDie ( ) )
break ;
if ( IsInvalidPlayerChecker ( ) ) break ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
DWORD dwUniqueID ;
int nSignalIndex ;
EtVector3 vPos ;
int nRange = 100 ;
Stream . Read ( & dwUniqueID , sizeof ( DWORD ) ) ;
Stream . Read ( & nSignalIndex , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
CEtActionSignal * pSignal = GetSignal ( m_nActionIndex , nSignalIndex ) ;
if ( pSignal & & pSignal - > GetSignalIndex ( ) = = STE_PickupItem ) {
PickupItemStruct * pSignalStruct = ( PickupItemStruct * ) pSignal - > GetData ( ) ;
nRange = pSignalStruct - > nRange ;
}
m_pPlayerSpeedHackChecker - > OnSyncPosition ( vPos ) ;
SetPosition ( vPos ) ;
if ( GetGameRoom ( ) )
{
DnDropItemHandle hDropItem = GetGameRoom ( ) - > FindDropItem ( dwUniqueID ) ;
if ( hDropItem )
{
( ( CDnPlayerPickupChecker * ) m_pPlayerPickupChecker ) - > OnPickupDist ( vPos , hDropItem ) ;
if ( m_pSession & & m_pSession - > GetItem ( ) & & m_pSession - > GetItem ( ) - > GetPetEquip ( ) ) //<2F> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> ߴ ٸ<DFB4>
{
const TVehicle * pPet = m_pSession - > GetItem ( ) - > GetPetEquip ( ) ;
// <20> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> (2<> <32> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
float fDist = EtVec2Length ( & ( EtVector2 ( hDropItem - > GetPosition ( ) - > x , hDropItem - > GetPosition ( ) - > z ) - EtVector2 ( vPos . x , vPos . z ) ) ) ;
if ( fDist > pPet - > nRange * 2.f )
return ;
}
else
{
// <20> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> (2<> <32> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
float fDist = EtVec2Length ( & ( EtVector2 ( hDropItem - > GetPosition ( ) - > x , hDropItem - > GetPosition ( ) - > z ) - EtVector2 ( vPos . x , vPos . z ) ) ) ;
if ( fDist > nRange * 2.f )
return ;
}
PickupItemStruct Struct ;
Struct . nRange = nRange ;
CmdPickupItem ( & Struct , hDropItem ) ;
}
}
break ;
}
case eActor : : CS_CMDESCAPE :
{
// <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( m_LastEscapeTime > 0 & & CDnActionBase : : m_LocalTime - m_LastEscapeTime < 1000 * 60 * 1 ) break ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
SetPosition ( vPos ) ;
SetStaticPosition ( vPos ) ;
SetPrevPosition ( vPos ) ;
if ( m_pPlayerSpeedHackChecker ) m_pPlayerSpeedHackChecker - > ResetInvalid ( ) ;
if ( m_pPlayerDoNotEnterChecker ) m_pPlayerDoNotEnterChecker - > ResetInvalid ( ) ;
CmdEscape ( vPos ) ;
}
break ;
case eActor : : CS_CANNONPOSSESS_REQ :
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰڴٴ<DAB4> Ŭ<> <C5AC> <EFBFBD> κ<EFBFBD> <CEBA> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> û.
// <20> <> û<EFBFBD> <C3BB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> .
CPacketCompressStream Stream ( pPacket , 128 ) ;
DWORD dwCannonMonsterActorID = 0 ;
MatrixEx Cross ;
Stream . Read ( & dwCannonMonsterActorID , sizeof ( DWORD ) ) ;
Stream . Read ( & Cross , sizeof ( MatrixEx ) ) ;
bool bSuccess = false ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <CDBF> <EFBFBD> <20> Ҵ<EFBFBD> .
CDnActor * pActor = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , dwCannonMonsterActorID ) ;
if ( pActor & & pActor - > GetActorType ( ) = = ActorTypeEnum : : Cannon )
{
CDnCannonMonsterActor * pCannonActor = static_cast < CDnCannonMonsterActor * > ( pActor ) ;
// Ŭ<> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ó<EFBFBD> <C3B3> <20> <> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> .
// Press Circle <20> <> <EFBFBD> <EFBFBD> <20> Ÿ<EFBFBD> <C5B8> <EFBFBD> <20> ָ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɼ<EFBFBD> <C9BC> <EFBFBD> <20> ִ<EFBFBD> .. <20> ణ <20> <> <EFBFBD> 뵵 <20> <> <EFBFBD> <EFBFBD> <20> ־ <20> <> <20> <> .
bool bValid = false ;
float fDistanceSQ = EtVec3LengthSq ( & EtVector3 ( * pCannonActor - > GetPosition ( ) - * GetPosition ( ) ) ) ;
float fPressCircleDist = float ( GetUnitSize ( ) + pCannonActor - > GetUnitSize ( ) ) ;
float fPressCircleDistSQ = fPressCircleDist * fPressCircleDist ;
if ( fPressCircleDistSQ < = fDistanceSQ + 1000.0f | | fPressCircleDistSQ - 1000.f < = fDistanceSQ )
{
// <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( false = = pCannonActor - > IsPossessed ( ) )
{
m_bPlayerCannonMode = true ;
pCannonActor - > SetMasterPlayerActor ( GetMySmartPtr ( ) ) ;
m_hCannonMonsterActor = pCannonActor - > GetMySmartPtr ( ) ;
m_Cross = Cross ;
bSuccess = true ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Բ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
char acBuffer [ 64 ] = { 0 } ;
CPacketCompressStream Result ( acBuffer , sizeof ( acBuffer ) ) ;
Result . Write ( & bSuccess , sizeof ( bool ) ) ;
Result . Write ( & dwCannonMonsterActorID , sizeof ( DWORD ) ) ;
Result . Write ( & m_Cross . m_vPosition , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Result . Write ( & m_Cross . m_vXAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
Result . Write ( & m_Cross . m_vYAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
Result . Write ( & m_Cross . m_vZAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
Send ( eActor : : SC_CANNONPOSSESS_RES , & Result ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> и<EFBFBD> <D0B8> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> <EFBFBD> ½<EFBFBD> <C2BD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> .
SetWeight ( 0.f ) ;
SetPressLevel ( - 1 ) ;
# ifdef PRE_ADD_MODIFY_PLAYER_CANNON
DNTableFileFormat * pTableCannon = GetDNTable ( CDnTableDB : : TCANNON ) ;
if ( pTableCannon - > IsExistItem ( pCannonActor - > GetClassID ( ) ) )
{
const char * pCannonActionName = pTableCannon - > GetFieldFromLablePtr ( pCannonActor - > GetClassID ( ) , " _StandName " ) - > GetString ( ) ;
CmdAction ( pCannonActionName ) ;
}
else
{
CmdAction ( " Stand_Cannon " ) ;
}
# else
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CmdAction ( " Stand_Cannon " ) ;
# endif
}
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( false = = bSuccess )
{
char acBuffer [ 64 ] = { 0 } ;
CPacketCompressStream Result ( acBuffer , sizeof ( acBuffer ) ) ;
Result . Write ( & bSuccess , sizeof ( bool ) ) ;
Send ( eActor : : SC_CANNONPOSSESS_RES , & Result ) ;
}
}
break ;
case eActor : : CS_CANNONRELEASE :
{
DWORD dwCannonMonsterID = 0 ;
MatrixEx Cross ;
CPacketCompressStream Result ( pPacket , 64 ) ;
Result . Read ( & dwCannonMonsterID , sizeof ( DWORD ) ) ;
Result . Read ( & Cross . m_vPosition , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Result . Read ( & Cross . m_vXAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
Result . Read ( & Cross . m_vYAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
Result . Read ( & Cross . m_vZAxis , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
CDnActor * pActor = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , dwCannonMonsterID ) ;
if ( pActor & & pActor - > GetActorType ( ) = = ActorTypeEnum : : Cannon )
{
CDnCannonMonsterActor * pCannonMonster = static_cast < CDnCannonMonsterActor * > ( pActor ) ;
pCannonMonster - > ClearMasterPlayerActor ( ) ;
m_Cross = Cross ;
EndCannonMode ( ) ;
}
}
break ;
case eActor : : CS_CANNONROTATESYNC :
{
_ASSERT ( IsCannonMode ( ) ) ;
if ( false = = IsCannonMode ( ) )
break ;
CPacketCompressStream Stream ( pPacket , 64 ) ;
DWORD dwCannonMonsterID = 0 ;
EtVector3 vDirection ( 0.0f , 0.0f , 0.0f ) ;
Stream . Read ( & dwCannonMonsterID , sizeof ( DWORD ) ) ;
Stream . Read ( & vDirection , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_SHORT ) ;
CDnActor * pActor = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , dwCannonMonsterID ) ;
if ( pActor & & pActor - > GetActorType ( ) = = ActorTypeEnum : : Cannon )
{
CDnCannonMonsterActor * pCannonMonster = static_cast < CDnCannonMonsterActor * > ( pActor ) ;
EtVec3Normalize ( & vDirection , & vDirection ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> ۵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> ȭ <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> .
pCannonMonster - > SetCannonLookDirection ( & vDirection ) ; // Rotha - <20> <> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> °<EFBFBD> <20> ƴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> .
m_Cross . m_vZAxis = pCannonMonster - > GetMatEx ( ) - > m_vZAxis ;
m_Cross . MakeUpCartesianByZAxis ( ) ;
// press circle <20> <> <EFBFBD> <EFBFBD> ŭ <20> о <EFBFBD> <D0BE> ָ<EFBFBD> <20> ȴ<EFBFBD> .
m_Cross . m_vPosition = pCannonMonster - > GetMatEx ( ) - > m_vPosition - ( pCannonMonster - > GetMatEx ( ) - > m_vZAxis * 20.0f ) ;
EtVector2 vDir ;
float vDist = 0.0f ;
_ASSERT ( GetPress ( ) = = CDnActorState : : Press_Circle & & pCannonMonster - > GetPress ( ) = = CDnActorState : : Press_Circle ) ;
if ( GetPress ( ) = = CDnActorState : : Press_Circle & & pCannonMonster - > GetPress ( ) = = CDnActorState : : Press_Circle )
{
if ( CheckPressCircle2Clrcle2 ( pCannonMonster - > GetMySmartPtr ( ) , GetMySmartPtr ( ) , vDir , vDist ) )
{
m_Cross . m_vPosition . x + = vDir . x * vDist ;
m_Cross . m_vPosition . z + = vDir . y * vDist ;
}
}
// <20> <> Ÿ<> ֿ̹<CCB9> <20> ٸ<EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> "Stand" <20> <EFBFBD> <D7BC> <EFBFBD> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Stand_Cannon <20> <> <20> ٲ<EFBFBD> <D9B2> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ϴٰ<CFB4> Ǯ<> <C7AE> <EFBFBD> ų<EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
const char * pCurrentAction = GetCurrentAction ( ) ;
if ( strcmp ( pCurrentAction , " Stand " ) = = 0 )
{
# ifdef PRE_ADD_MODIFY_PLAYER_CANNON
DNTableFileFormat * pTableCannon = GetDNTable ( CDnTableDB : : TCANNON ) ;
if ( pTableCannon - > IsExistItem ( pCannonMonster - > GetClassID ( ) ) )
{
const char * pCannonActionName = pTableCannon - > GetFieldFromLablePtr ( pCannonMonster - > GetClassID ( ) , " _StandName " ) - > GetString ( ) ;
CmdAction ( pCannonActionName ) ;
}
else
{
CmdAction ( " Stand_Cannon " ) ;
}
# else
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CmdAction ( " Stand_Cannon " ) ;
# endif
}
}
}
break ;
case eActor : : CS_CANNONTARGETING :
{
if ( false = = IsCannonMode ( ) )
break ;
DWORD dwCannonMonsterID = 0 ;
EtVector3 vCannonDir ; // Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> ī<> <EFBFBD> <DEB6> <EFBFBD> <20> ٶ<D9B6> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ᱹ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
EtVector3 vShootDir ;
EtVector3 vCannonGroundHitPos ;
CPacketCompressStream Stream ( pPacket , 64 ) ;
Stream . Read ( & dwCannonMonsterID , sizeof ( DWORD ) ) ;
Stream . Read ( & vCannonDir , sizeof ( EtVector3 ) ) ;
Stream . Read ( & vShootDir , sizeof ( EtVector3 ) ) ;
Stream . Read ( & vCannonGroundHitPos , sizeof ( EtVector3 ) ) ;
CDnActor * pActor = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , dwCannonMonsterID ) ;
if ( pActor & & pActor - > GetActorType ( ) = = ActorTypeEnum : : Cannon )
{
CDnCannonMonsterActor * pCannonMonster = static_cast < CDnCannonMonsterActor * > ( pActor ) ;
pCannonMonster - > SetCannonProjectileInfo ( vCannonDir , vShootDir , vCannonGroundHitPos ) ;
}
}
break ;
case eActor : : CS_VEHICLE_RIDE_COMPLETE :
{
if ( ! IsVehicleMode ( ) | | ! GetMyVehicleActor ( ) )
return ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
bool bComplete = false ;
Stream . Read ( & bComplete , sizeof ( bool ) ) ;
if ( bComplete )
{
DNVector ( DnBlowHandle ) vlhFrameBlows ;
DNVector ( DnBlowHandle ) vlhMoveSpeedBlows ;
m_pStateBlow - > GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_025 , vlhFrameBlows ) ;
m_pStateBlow - > GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_076 , vlhMoveSpeedBlows ) ;
if ( vlhFrameBlows . size ( ) > 0 )
{
for ( DWORD i = 0 ; i < vlhFrameBlows . size ( ) ; i + + )
{
if ( vlhFrameBlows [ i ] )
GetMyVehicleActor ( ) - > CmdAddStateEffect ( vlhFrameBlows [ i ] - > GetParentSkillInfo ( ) , vlhFrameBlows [ i ] - > GetBlowIndex ( ) , ( int ) ( vlhFrameBlows [ i ] - > GetDurationTime ( ) * 1000 ) ,
vlhFrameBlows [ i ] - > GetValue ( ) ) ;
}
}
if ( vlhMoveSpeedBlows . size ( ) > 0 )
{
for ( DWORD i = 0 ; i < vlhMoveSpeedBlows . size ( ) ; i + + )
{
if ( vlhMoveSpeedBlows [ i ] )
GetMyVehicleActor ( ) - > CmdAddStateEffect ( vlhMoveSpeedBlows [ i ] - > GetParentSkillInfo ( ) , vlhMoveSpeedBlows [ i ] - > GetBlowIndex ( ) , ( int ) ( vlhMoveSpeedBlows [ i ] - > GetDurationTime ( ) * 1000 ) ,
vlhMoveSpeedBlows [ i ] - > GetValue ( ) ) ;
}
}
}
}
break ;
case eActor : : CS_SYNCPRESSEDPOS :
{
if ( GetGameRoom ( ) & & GetGameRoom ( ) - > GetGameTask ( ) & & ! GetGameRoom ( ) - > GetGameTask ( ) - > IsSyncComplete ( ) ) break ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
EtVector3 vPos ;
DWORD dwGap ;
Stream . Read ( & dwGap , sizeof ( DWORD ) ) ;
Stream . Read ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
m_pPlayerSpeedHackChecker - > OnSyncDatumGap ( dwGap ) ;
SetPosition ( vPos ) ;
// SetMagnetPosition( vPos );
}
break ;
case eActor : : CS_UDP_PING :
{
CPacketCompressStream Stream ( pPacket , 128 ) ;
DWORD dwTick = 0 ;
Stream . Read ( & dwTick , sizeof ( dwTick ) ) ;
m_pSession - > RecvUdpPing ( dwTick ) ;
break ;
}
case eActor : : CS_SUMMONOFF :
{
CPacketCompressStream Stream ( pPacket , 64 ) ;
DWORD dwSummonMonsterUniqueID = 0 ;
Stream . Read ( & dwSummonMonsterUniqueID , sizeof ( DWORD ) ) ;
CDnActor * pSummonMonster = CDnActor : : FindActorFromUniqueID ( GetRoom ( ) , dwSummonMonsterUniqueID ) ;
if ( pSummonMonster )
pSummonMonster - > CmdSuicide ( false , false ) ;
}
break ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
// case eActor::CS_TOTAL_LEVEL:
// {
// int nTotalLevel = 0;
//
// CPacketCompressStream Stream( pPacket, 128 );
// Stream.Read( &nTotalLevel, sizeof(int) );
//
// UpdateTotalLevel(nTotalLevel);
// }
// break;
case eActor : : CS_ADD_TOTAL_LEVEL_SKILL :
{
int nSlotIndex = - 1 ;
int nSkillID = 0 ;
bool isInitialize = false ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
Stream . Read ( & nSlotIndex , sizeof ( int ) ) ;
Stream . Read ( & nSkillID , sizeof ( int ) ) ;
Stream . Read ( & isInitialize , sizeof ( bool ) ) ;
if ( nSlotIndex > = TotalLevelSkill : : Common : : MAXSLOTCOUNT )
break ;
if ( ! m_pSession - > AddTotalLevelSkillData ( nSlotIndex , nSkillID , isInitialize ) )
{
break ;
}
else
AddTotalLevelSkill ( nSlotIndex , nSkillID , isInitialize ) ;
m_pSession - > SendAddTotalLevelSkill ( m_pSession - > GetSessionID ( ) , nSlotIndex , nSkillID , isInitialize ) ;
}
break ;
case eActor : : CS_REMOVE_TOTAL_LEVEL_SKILL :
{
int nSlotIndex = - 1 ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
Stream . Read ( & nSlotIndex , sizeof ( int ) ) ;
if ( nSlotIndex < 0 | | nSlotIndex > = TotalLevelSkill : : Common : : MAXSLOTCOUNT )
break ;
RemoveTotalLevelSkill ( nSlotIndex ) ;
m_pSession - > AddTotalLevelSkillData ( nSlotIndex , 0 ) ;
m_pSession - > SendDelTotalLevelSkill ( m_pSession - > GetSessionID ( ) , nSlotIndex ) ;
}
break ;
// case eActor::CS_TOTAL_LEVEL_SKILL_ACTIVE_LIST:
// {
// int nCount = 0;
// int nSlotIndex = -1;
// int nSkillID = 0;
//
// CPacketCompressStream Stream( pPacket, 128 );
// Stream.Read( &nCount, sizeof(int) );
//
// for (int i = 0; i < nCount; ++i)
// {
// Stream.Read( &nSlotIndex, sizeof(int) );
// Stream.Read( &nSkillID, sizeof(int) );
//
// ActivateTotalLevelSkillSlot(nSlotIndex, true);
// AddTotalLevelSkill(nSlotIndex, nSkillID);
// }
// }
// break;
// case eActor::CS_TOTAL_LEVEL_SKILL_CASHSLOT_ACTIVATE:
// {
// int nSlotIndex = -1;
// bool bActivate = false;
//
// CPacketCompressStream Stream( pPacket, 128 );
// Stream.Read(&nSlotIndex, sizeof(int));
// Stream.Read(&bActivate, sizeof(bool));
//
// ActivateTotalLevelSkillCashSlot(bActivate);
// }
// break;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# if defined(PRE_FIX_68898)
case eActor : : CS_SKIP_END_ACTION :
{
bool isSkipEndAction = false ;
CPacketCompressStream Stream ( pPacket , 128 ) ;
Stream . Read ( & isSkipEndAction , sizeof ( bool ) ) ;
SetSkipEndAction ( isSkipEndAction ) ;
}
break ;
# endif // PRE_FIX_68898
}
}
void CDnPlayerActor : : SyncClassTime ( LOCAL_TIME LocalTime )
{
MAActorRenderBase : : m_LocalTime = LocalTime ;
CDnActor : : SyncClassTime ( LocalTime ) ;
}
void CDnPlayerActor : : ProcessDie ( LOCAL_TIME LocalTime , float fDelta )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> ~
if ( ! IsDie ( ) ) {
ToggleGhostMode ( false ) ;
return ;
}
if ( m_fDieDelta > 0.f ) {
m_fDieDelta - = fDelta ;
if ( m_fDieDelta < 0.f ) m_fDieDelta = 0.f ;
}
if ( ! m_bGhost & & m_fDieDelta < m_fMaxDieDelta - 4.f ) {
ToggleGhostMode ( true ) ;
}
if ( m_fDieDelta < = 0.f ) {
OnFinishProcessDie ( ) ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <20> <> <20> ְ<EFBFBD> , <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 忡 <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> . <20> ϴ<EFBFBD> <20> ׳ <EFBFBD> <20> Ǽ<EFBFBD> <C7BC> 縮 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( m_afLastEquipItemSkillRemainTime ! = 0.0f )
{
m_afLastEquipItemSkillRemainTime - = fDelta ;
if ( m_afLastEquipItemSkillRemainTime < 0.0f )
m_afLastEquipItemSkillRemainTime = 0.0f ;
}
}
void CDnPlayerActor : : OnKillMonster ( DnActorHandle hMonster )
{
if ( ! m_pSession ) return ;
if ( m_pSession - > GetQuest ( ) = = NULL ) return ;
if ( hMonster & & hMonster - > IsMonsterActor ( ) )
{
CDnMonsterActor * pMonster = static_cast < CDnMonsterActor * > ( hMonster . GetPointer ( ) ) ;
if ( pMonster )
{
m_pSession - > GetQuest ( ) - > OnKillMonster ( pMonster - > GetMonsterClassID ( ) ) ;
UpdateKillMonster ( ) ;
if ( pMonster - > IsBossKillCheck ( ) )
UpdateKillBoss ( ) ;
}
}
}
void CDnPlayerActor : : OnStateBlowProcessAfter ( )
{
if ( m_uiStateBlowProcessAfterBit & eStateBlowAfterProcessType : : eRebirth )
{
m_uiStateBlowProcessAfterBit & = ~ eStateBlowAfterProcessType : : eRebirth ;
if ( ! GetGameRoom ( ) )
{
_DANGER_POINT ( ) ;
return ;
}
GetGameRoom ( ) - > OnRebirth ( GetActorHandle ( ) ) ;
}
if ( m_uiStateBlowProcessAfterBit & eStateBlowAfterProcessType : : eDelZombie )
{
m_uiStateBlowProcessAfterBit & = ~ eStateBlowAfterProcessType : : eDelZombie ;
if ( GetGameRoom ( ) & & GetGameRoom ( ) - > bIsZombieMode ( ) )
static_cast < CPvPZombieMode * > ( static_cast < CDNPvPGameRoom * > ( GetGameRoom ( ) ) - > GetPvPGameMode ( ) ) - > DelZombie ( GetActorHandle ( ) , true ) ;
}
}
void CDnPlayerActor : : OnAddStateBlowProcessAfterType ( eStateBlowAfterProcessType Type )
{
m_uiStateBlowProcessAfterBit | = Type ;
}
void CDnPlayerActor : : OnDie ( DnActorHandle hHitter )
{
# if defined( PRE_ADD_SECONDARY_SKILL )
if ( GetUserSession ( ) & & GetUserSession ( ) - > GetSecondarySkillRepository ( ) )
static_cast < CSecondarySkillRepositoryServer * > ( GetUserSession ( ) - > GetSecondarySkillRepository ( ) ) - > CancelManufacture ( ) ;
# endif // #if defined( PRE_ADD_SECONDARY_SKILL )
CDnActor : : OnDie ( hHitter ) ;
// hitter <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˸ <EFBFBD> <CBB8> <EFBFBD> . /////////////////////////////////////////////
if ( hHitter & & hHitter - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayer = static_cast < CDnPlayerActor * > ( hHitter . GetPointer ( ) ) ;
boost : : shared_ptr < IDnObserverNotifyEvent > pEvent ( IDnObserverNotifyEvent : : Create ( EVENT_PLAYER_KILL_TARGET ) ) ;
pPlayer - > Notify ( pEvent ) ;
}
//////////////////////////////////////////////////////////////////////////
UpdateDead ( ) ;
AddStageDeathCount ( ) ;
if ( m_pRoom & & ! m_pRoom - > bIsPvPRoom ( ) ) {
for ( DWORD i = 0 ; i < CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetUserCount ( ) ; i + + ) {
CDNGameRoom : : PartyStruct * pParty = CDnPartyTask : : GetInstance ( GetRoom ( ) ) . GetPartyData ( i ) ;
if ( ! pParty | | ! pParty - > pSession ) continue ;
if ( pParty - > pSession = = m_pSession ) continue ;
DnActorHandle hActor = pParty - > pSession - > GetActorHandle ( ) ;
if ( ! hActor ) continue ;
CDnPlayerActor * pPlayer = ( CDnPlayerActor * ) hActor . GetPointer ( ) ;
pPlayer - > UpdatePartyMemberDead ( ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ,
// <20> <> Ȱ<EFBFBD> ϰ<EFBFBD> <CFB0> <EFBFBD> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> ٽ<EFBFBD> <20> ɾ<EFBFBD> <C9BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ..
if ( m_hProcessSkill )
m_hProcessSkill - > OnEnd ( CDnActionBase : : m_LocalTime , 0.0f ) ;
// <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> ִٸ<D6B4> <20> <> <EFBFBD> <EFBFBD>
EndAutoPassiveSkill ( CDnActionBase : : m_LocalTime , 0.0f ) ;
// <20> <> <EFBFBD> ξ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD>
EndPrefixSystemSkill ( CDnActionBase : : m_LocalTime , 0.0f ) ;
// #14340 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. <20> <EFBFBD> <D7BE> <EFBFBD> <20> <> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ų, <20> <> <EFBFBD> ۽<EFBFBD> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> <> <EFBFBD> ش<EFBFBD> .
if ( IsEnabledToggleSkill ( ) )
OnSkillToggle ( m_hToggleSkill , false ) ;
if ( IsEnabledAuraSkill ( ) )
OnSkillAura ( m_hAuraSkill , false ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
RemoveAllBlowExpectPassiveSkill ( ) ;
// <20> κ<EFBFBD> <CEBA> 丮 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> ش<EFBFBD> .
if ( m_pSession & & m_pSession - > GetItem ( ) )
{
//m_pSession->GetItem()->ResetCoolTime();
}
SetSP ( 0 ) ;
bool bIgnoreDuration = false ;
if ( bIgnoreDuration = = false )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ҽ <EFBFBD> <D2BD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
bool bDecreaseDurability = true ;
if ( m_pRoom ) {
if ( m_pRoom - > bIsPvPRoom ( ) ) bDecreaseDurability = false ;
else if ( m_pRoom - > bIsDLRoom ( ) ) bDecreaseDurability = false ;
else if ( m_pRoom - > bIsFarmRoom ( ) ) bDecreaseDurability = false ;
}
if ( bDecreaseDurability ) OnDecreaseEquipDurability ( GetDeadDurabilityRatio ( ) , true ) ;
}
if ( GetGameRoom ( ) )
{
GetGameRoom ( ) - > OnDie ( GetActorHandle ( ) , hHitter ) ;
if ( GetGameRoom ( ) - > GetGameTask ( ) )
GetGameRoom ( ) - > GetGameTask ( ) - > OnDie ( GetActorHandle ( ) , hHitter ) ;
}
if ( IsCannonMode ( ) )
{
static_cast < CDnCannonMonsterActor * > ( m_hCannonMonsterActor . GetPointer ( ) ) - > OnMasterPlayerActorDie ( ) ;
EndCannonMode ( ) ;
}
m_pBubbleSystem - > Clear ( ) ;
if ( CDnWorld : : IsActive ( GetRoom ( ) ) )
{
CDnWorld : : GetInstance ( GetRoom ( ) ) . InsertTriggerEventStore ( " DieActionPlayer " , GetUniqueID ( ) ) ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . OnTriggerEventCallback ( " CDnPlayerActor::OnDie " , CDnActionBase : : m_LocalTime , 0.f ) ;
}
}
void CDnPlayerActor : : OnFinishProcessDie ( )
{
if ( GetGameRoom ( ) )
GetGameRoom ( ) - > OnFinishProcessDie ( GetActorHandle ( ) ) ;
}
void CDnPlayerActor : : ResetActor ( )
{
CDnActor : : ResetActor ( ) ;
m_cMovePushKeyFlag = 0 ;
m_LastEscapeTime = 0 ;
if ( IsProcessSkill ( ) ) CancelUsingSkill ( ) ;
// #26902 <20> ӽ÷<D3BD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ִٸ<D6B4> <20> <> <EFBFBD> <EFBFBD> . Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <EFBFBD> ״<EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( IsTempSkillAdded ( ) )
{
RemoveAllTempSkill ( ) ;
EndAddTempSkillAndSendRestoreTempJobChange ( ) ;
}
if ( m_pPlayerSpeedHackChecker ) m_pPlayerSpeedHackChecker - > ResetInvalid ( ) ;
map < int , DnSkillHandle > : : iterator iter = m_mapEnchantSkillFromBubble . begin ( ) ;
for ( iter ; iter ! = m_mapEnchantSkillFromBubble . end ( ) ; )
{
SAFE_RELEASE_SPTR ( iter - > second ) ;
iter = m_mapEnchantSkillFromBubble . erase ( iter ) ;
}
m_MixedActionTimeStamp = 0 ;
}
void CDnPlayerActor : : GetBoundingSphere ( SSphere & Sphere , bool bActorSize /* = false*/ )
{
Sphere . Center = m_Cross . m_vPosition ;
Sphere . Center . y + = 50.f ;
Sphere . fRadius = 50.f ;
}
void CDnPlayerActor : : SetBattleMode ( bool bEnable )
{
m_bBattleMode = bEnable ;
}
bool CDnPlayerActor : : IsCanBattleMode ( )
{
if ( IsSwapSingleSkin ( ) ) return false ;
if ( m_bBattleMode & & ! m_hWeapon [ 0 ] ) return false ;
if ( IsSpectatorMode ( ) ) return false ;
return m_bBattleMode ;
}
int CDnPlayerActor : : GetLevelUpSkillPoint ( int nPrevLevel , int nCurLevel )
{
if ( nPrevLevel = = nCurLevel ) return 0 ;
int nSkillPoint = 0 ;
for ( int i = nPrevLevel + 1 ; i < = nCurLevel ; i + + ) {
int nItemID = ( ( GetClassID ( ) - 1 ) * PLAYER_MAX_LEVEL ) + i ;
nSkillPoint + = CPlayerLevelTable : : GetInstance ( ) . GetValue ( GetJobClassID ( ) , i , CPlayerLevelTable : : SkillPoint ) ;
}
return nSkillPoint ;
}
void CDnPlayerActor : : OnBattleToggle ( bool bBattle )
{
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & bBattle , sizeof ( bool ) ) ;
Send ( eActor : : SC_CMDTOGGLEBATTLE , & Stream ) ;
}
void CDnPlayerActor : : OnLevelUp ( int nLevel , int nLevelUpAmount )
{
if ( ! IsDie ( ) ) {
SetHP ( GetMaxHP ( ) ) ;
SetSP ( GetMaxSP ( ) ) ;
}
int nSkillPoint = GetLevelUpSkillPoint ( nLevel - nLevelUpAmount , nLevel ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ÿ<EFBFBD> <C3BF> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ʈ <20> α <EFBFBD> <CEB1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
m_pSession - > ChangeSkillPoint ( nSkillPoint , 0 , true , DBDNWorldDef : : SkillPointCode : : LevelUp , DualSkill : : Type : : Primary ) ;
m_pSession - > ChangeSkillPoint ( nSkillPoint , 0 , true , DBDNWorldDef : : SkillPointCode : : LevelUp , DualSkill : : Type : : Secondary ) ;
m_pSession - > SetLevel ( m_nLevel , DBDNWorldDef : : CharacterLevelChangeCode : : Normal , true ) ;
m_pSession - > SetExp ( m_nExperience , DBDNWorldDef : : CharacterExpChangeCode : : Dungeon , 0 , true ) ;
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & nLevel , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Write ( & m_nExperience , sizeof ( int ) ) ;
Send ( eActor : : SC_LEVELUP , & Stream ) ;
# if !defined(PRE_DELETE_DUNGEONCLEAR)
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ <20> <> <EFBFBD> ⼭ <20> ѹ<EFBFBD> <20> <> <EFBFBD> ÷<EFBFBD> <C3B7> <EFBFBD> <20> ؼ<EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> °͵<C2B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
m_pSession - > RefreshDungeonEnterLevel ( ) ;
# endif // #if !defined(PRE_DELETE_DUNGEONCLEAR)
// Refresh <20> غ<EFBFBD> <D8BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( CDnPartyTask : : IsActive ( GetRoom ( ) ) ) CDnPartyTask : : GetInstance ( GetRoom ( ) ) . UpdateGateInfo ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> Ҹ<EFBFBD> SP <20> <> <20> ٸ<EFBFBD> <D9B8> ⶫ<EFBFBD> <E2B6AB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; i + + ) {
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
if ( hSkill ) hSkill - > RefreshDecreaseMP ( ) ;
}
m_pSession - > NotifyGuildMemberLevelUp ( nLevel ) ;
m_pSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnLevelUp ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_pSession - > GetMasterSystemData ( ) - > SimpleInfo . iMasterCount > 0 & & nLevel > = static_cast < int > ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : MasterSystem_GraduateLevel ) ) )
{
if ( m_pSession - > CheckDBConnection ( ) )
m_pSession - > GetDBConnection ( ) - > QueryMasterSystemGraduate ( m_pSession ) ;
}
if ( CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapType ( ) = = EWorldEnum : : MapTypeDungeon & & m_pSession - > GetPeriodExpItemRate ( ) > 0 )
m_pSession - > SetPeriodExpItemRate ( ) ;
# if defined( PRE_ADD_BESTFRIEND )
m_pSession - > BestFriendChangeLevel ( nLevel , true ) ;
# endif
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
UpdateTotalLevelByCharLevel ( ) ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
void CDnPlayerActor : : OnAddExperience ( int nAddExperience , int nLogCode , INT64 biFKey )
{
m_pSession - > ChangeExp ( nAddExperience , nLogCode , biFKey ) ; // db<64> <62> <EFBFBD> <EFBFBD> <20> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
}
void CDnPlayerActor : : OnBeginStateBlow ( DnBlowHandle hBlow )
{
// <20> <> <EFBFBD> ߿<EFBFBD> <20> <> ġ<EFBFBD> <C4A1> ..
DNVector ( DnActorHandle ) hVecList ;
ScanActor ( GetRoom ( ) , m_Cross . m_vPosition , 2000.f , hVecList ) ;
for ( DWORD i = 0 ; i < hVecList . size ( ) ; i + + )
{
DnActorHandle hActor = hVecList [ i ] ;
if ( ! hActor )
continue ;
CDNAggroSystem * pAggroSystem = hActor - > GetAggroSystem ( ) ;
// <20> Ϲ ݴ<CFB9> <DDB4> <EFBFBD> <20> ÷<EFBFBD> <C3B7> ̽ÿ<CCBD> <C3BF> <EFBFBD> PlayerActor <20> <> AggroSystem <20> <> <20> <> <EFBFBD> <EFBFBD> .
if ( ! pAggroSystem )
continue ;
if ( ! pAggroSystem - > bOnCheckPlayerBeginStateBlow ( this ) )
continue ;
pAggroSystem - > OnStateBlowAggro ( hBlow ) ;
}
}
void CDnPlayerActor : : UnLockSkill ( int nSkillID , INT64 nUnlockPrice /*=0*/ )
{
// <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵǰ<C8B5> ..
vector < int > : : iterator iter = find ( m_vlUnlockZeroLevelSkills . begin ( ) , m_vlUnlockZeroLevelSkills . end ( ) , nSkillID ) ;
_ASSERT ( m_vlUnlockZeroLevelSkills . end ( ) = = iter ) ;
if ( m_vlUnlockZeroLevelSkills . end ( ) = = iter )
{
m_vlUnlockZeroLevelSkills . push_back ( nSkillID ) ;
CDnSkillTreeSystem : : S_POSSESSED_SKILL_INFO SkillInfo ;
SkillInfo . iSkillID = nSkillID ;
SkillInfo . iSkillLevel = 0 ;
SkillInfo . bCurrentLock = false ;
m_vlPossessedSkill . push_back ( SkillInfo ) ;
INT64 biCurrentCoin = 0 ;
INT64 biPickUpCoin = 0 ;
if ( nUnlockPrice > 0 )
{
biCurrentCoin = m_pSession - > GetCoin ( ) ;
biPickUpCoin = m_pSession - > GetPickUpCoin ( ) ;
m_pSession - > SelPickUpCoin ( 0 ) ;
}
m_pSession - > GetDBConnection ( ) - > QueryAddSkill ( m_pSession , nSkillID , SkillInfo . iSkillLevel , 0 , DBDNWorldDef : : SkillChangeCode : : GainByBuy , nUnlockPrice , biCurrentCoin , biPickUpCoin ) ;
}
}
int CDnPlayerActor : : CanAcquireSkillIfUnlock ( int nSkillID )
{
int nRetCode = ERROR_NONE ;
CDnSkillTreeSystem * pSkillTreeSystem = g_pDataManager - > GetSkillTreeSystem ( ) ;
CDnSkillTreeSystem : : S_TRY_ACQUIRE TryAcquire ( GetPossessedSkillInfo ( ) ) ;
CDnSkillTreeSystem : : S_OUTPUT Output ;
TryAcquire . iCurrentCharLevel = GetLevel ( ) ;
TryAcquire . iTryAcquireSkillID = nSkillID ;
TryAcquire . iHasSkillPoint = GetAvailSkillPointByJob ( nSkillID ) ;
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
int iNeedJob = pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _NeedJob " ) - > GetInteger ( ) ;
if ( IsPassJob ( iNeedJob ) )
{
pSkillTreeSystem - > TryAcquireSkill ( TryAcquire , & Output ) ;
// #36858 <20> ۷ ι <DBB7> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> ش<EFBFBD> <20> <EFBFBD> <D7B7> ߿<EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> θ<EFBFBD> <20> <> ų <20> <> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> .
bool bAlreadyGlobalSkillAcquired = HasSameGlobalIDSkill ( nSkillID ) ;
bool bIgnoreParentSkillCondition = ( ( CDnSkillTreeSystem : : R_DONT_HAVE_PARENT_SKILL = = Output . eResult ) | |
( CDnSkillTreeSystem : : R_LOCKED_PARENTSKILL = = Output . eResult ) | |
( CDnSkillTreeSystem : : R_NOT_ENOUGH_PARENT_SKILL_LEVEL = = Output . eResult ) ) & &
true = = bAlreadyGlobalSkillAcquired ;
if ( CDnSkillTreeSystem : : R_SUCCESS ! = Output . eResult & &
false = = bIgnoreParentSkillCondition )
{
switch ( Output . eResult )
{
// ij<> <C4B3> <EFBFBD> <EFBFBD> <20> 䱸<EFBFBD> <E4B1B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڶ<EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_CHAR_LEVEL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_CHAR_LEVEL ;
break ;
// <20> <> <EFBFBD> <EFBFBD> (<28> θ<EFBFBD> ) <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_DONT_HAVE_PARENT_SKILL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_DONT_HAVE_PARENT_SKILL ;
break ;
// <20> θ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_PARENT_SKILL_LEVEL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_PARENT_SKILL_LEVEL ;
break ;
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> ڶ<EFBFBD> <DAB6> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> ȹ<> <C8B9> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_SKILLPOINT_TO_ACQUIRE :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_SKILLPOINT ;
break ;
}
}
}
return nRetCode ;
}
int CDnPlayerActor : : AcquireSkill ( int nSkillID )
{
int nRetCode = ERROR_NONE ;
vector < int > : : iterator iter = find ( m_vlUnlockZeroLevelSkills . begin ( ) , m_vlUnlockZeroLevelSkills . end ( ) , nSkillID ) ;
_ASSERT ( m_vlUnlockZeroLevelSkills . end ( ) ! = iter ) ;
if ( m_vlUnlockZeroLevelSkills . end ( ) ! = iter )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> .
TSkillData * pSkillData = g_pDataManager - > GetSkillData ( nSkillID ) ;
if ( IsExclusiveSkill ( nSkillID , pSkillData - > nExclusiveID ) )
{
// Ŭ<> <EFBFBD> <20> ⺻<EFBFBD> <E2BABB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> .
return ERROR_SKILL_ACQUIRE_FAIL_EXCLUSIVE ;
}
CDnSkillTreeSystem * pSkillTreeSystem = g_pDataManager - > GetSkillTreeSystem ( ) ;
CDnSkillTreeSystem : : S_TRY_ACQUIRE TryAcquire ( GetPossessedSkillInfo ( ) ) ;
CDnSkillTreeSystem : : S_OUTPUT Output ;
TryAcquire . iCurrentCharLevel = GetLevel ( ) ;
TryAcquire . iTryAcquireSkillID = nSkillID ;
TryAcquire . iHasSkillPoint = GetAvailSkillPointByJob ( nSkillID ) ;
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
int iNeedJob = pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _NeedJob " ) - > GetInteger ( ) ;
if ( IsPassJob ( iNeedJob ) )
{
//TryAcquire.iJobID = iNeedJob;
pSkillTreeSystem - > TryAcquireSkill ( TryAcquire , & Output ) ;
# if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP)
std : : vector < int > nNeedSPValues ;
CDnSkillTask * pSkillTask = static_cast < CDnSkillTask * > ( CTaskManager : : GetInstance ( m_pSession - > GetGameRoom ( ) ) . GetTask ( " SkillTask " ) ) ;
if ( pSkillTask )
pSkillTask - > GetNeedSPValuesByJob ( nSkillID , nNeedSPValues ) ;
std : : vector < int > jobHistory ;
GetJobHistory ( jobHistory ) ;
bool bAvailableSPByJob = false ;
if ( pSkillTask )
bAvailableSPByJob = pSkillTask - > IsAvailableSPByJob ( jobHistory , nNeedSPValues , this ) ;
if ( bAvailableSPByJob = = false )
Output . eResult = CDnSkillTreeSystem : : R_NOT_ENOUGH_SKILLPOINT_TO_ACQUIRE ;
# endif // PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP
// #36858 <20> ۷ ι <DBB7> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> ش<EFBFBD> <20> <EFBFBD> <D7B7> ߿<EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> θ<EFBFBD> <20> <> ų <20> <> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> .
bool bAlreadyGlobalSkillAcquired = HasSameGlobalIDSkill ( nSkillID ) ;
bool bIgnoreParentSkillCondition = ( ( CDnSkillTreeSystem : : R_DONT_HAVE_PARENT_SKILL = = Output . eResult ) | |
( CDnSkillTreeSystem : : R_LOCKED_PARENTSKILL = = Output . eResult ) | |
( CDnSkillTreeSystem : : R_NOT_ENOUGH_PARENT_SKILL_LEVEL = = Output . eResult ) ) & &
true = = bAlreadyGlobalSkillAcquired ;
if ( CDnSkillTreeSystem : : R_SUCCESS = = Output . eResult | |
true = = bIgnoreParentSkillCondition )
{
// <20> <> <EFBFBD> ο <EFBFBD> <CEBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 1<> <31> <20> ٲ<EFBFBD> .
//vector<CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO>::iterator iter = m_vlPossessedSkill.begin();
//for( iter; m_vlPossessedSkill.end() != iter; ++iter )
//{
// if( iter->iSkillID == nSkillID )
// {
// iter->iSkillLevel = 1;
// break;
// }
//}
bool bSuccess = AddSkill ( nSkillID , 1 ) ;
_ASSERT ( bSuccess ) ;
DnSkillHandle hAcquiredSkill = FindSkill ( nSkillID ) ;
m_pSession - > ChangeSkillPoint ( - hAcquiredSkill - > GetNowLevelSkillPoint ( ) , nSkillID , false , 0 ) ;
m_pSession - > GetDBConnection ( ) - > QueryModSkillLevel ( m_pSession , nSkillID , 1 , 0 , - hAcquiredSkill - > GetNowLevelSkillPoint ( ) , DBDNWorldDef : : SkillChangeCode : : GainByBuy ) ; // db<64> <62> <EFBFBD> <EFBFBD> : <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ
}
else
{
switch ( Output . eResult )
{
// ij<> <C4B3> <EFBFBD> <EFBFBD> <20> 䱸<EFBFBD> <E4B1B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڶ<EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_CHAR_LEVEL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_CHAR_LEVEL ;
break ;
// <20> <> <EFBFBD> <EFBFBD> (<28> θ<EFBFBD> ) <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_DONT_HAVE_PARENT_SKILL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_DONT_HAVE_PARENT_SKILL ;
break ;
// <20> θ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_PARENT_SKILL_LEVEL :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_PARENT_SKILL_LEVEL ;
break ;
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> ڶ<EFBFBD> <DAB6> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> ȹ<> <C8B9> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
case CDnSkillTreeSystem : : R_NOT_ENOUGH_SKILLPOINT_TO_ACQUIRE :
nRetCode = ERROR_SKILL_ACQUIRE_FAIL_NOT_ENOUGH_SKILLPOINT ;
break ;
}
}
}
}
return nRetCode ;
}
void CDnPlayerActor : : CheckAndRegisterObserverStateBlow ( DnBlowHandle hBlow )
{
switch ( hBlow - > GetBlowIndex ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF>
case STATE_BLOW : : BLOW_030 :
{
CDnBlockBlow * pObservable = static_cast < CDnBlockBlow * > ( hBlow . GetPointer ( ) ) ;
pObservable - > RegisterObserver ( m_pBubbleSystem ) ;
}
break ;
// <20> и<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF>
case STATE_BLOW : : BLOW_031 :
{
CDnParryBlow * pObservable = static_cast < CDnParryBlow * > ( hBlow . GetPointer ( ) ) ;
pObservable - > RegisterObserver ( m_pBubbleSystem ) ;
}
break ;
// <20> <> Ÿ<EFBFBD> <C5B8> <20> и<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> .
case STATE_BLOW : : BLOW_153 :
{
CDnCooltimeParryBlow * pObservable = static_cast < CDnCooltimeParryBlow * > ( hBlow . GetPointer ( ) ) ;
pObservable - > RegisterObserver ( m_pBubbleSystem ) ;
}
break ;
}
}
void CDnPlayerActor : : OnApplyPassiveSkillBlow ( int iBlowID )
{
DnBlowHandle hBlow = m_pStateBlow - > GetStateBlowFromID ( iBlowID ) ;
if ( hBlow )
CheckAndRegisterObserverStateBlow ( hBlow ) ;
}
bool CDnPlayerActor : : CanAddSkill ( int nSkillTableID , int nLevel /*= 1*/ )
{
TSkillData * pSkillData = g_pDataManager - > GetSkillData ( nSkillTableID ) ;
if ( pSkillData = = NULL )
return false ;
if ( GetGameRoom ( ) = = NULL )
return false ;
if ( GetGameRoom ( ) - > bIsZombieMode ( ) = = true )
{
if ( CDnSkill : : Passive = = pSkillData - > cSkillType & & CDnSkill : : DurationTypeEnum : : Buff = = pSkillData - > cDurationType )
return false ;
}
return true ;
}
bool CDnPlayerActor : : AddSkill ( int nSkillTableID , int nLevel /* = 1 */ , int iSkillLevelApplyType /* = CDnSkill::PVE*/ )
{
bool bSuccess = false ;
if ( 0 < nLevel )
{
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> pve/pvp <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
int iSkillLevelDataType = CDnSkill : : PVE ;
if ( GetGameRoom ( ) - > bIsPvPRoom ( ) )
iSkillLevelDataType = CDnSkill : : PVP ;
bSuccess = MASkillUser : : AddSkill ( nSkillTableID , nLevel , iSkillLevelDataType ) ;
vector < int > : : iterator iter = find ( m_vlUnlockZeroLevelSkills . begin ( ) , m_vlUnlockZeroLevelSkills . end ( ) , nSkillTableID ) ;
if ( m_vlUnlockZeroLevelSkills . end ( ) ! = iter )
m_vlUnlockZeroLevelSkills . erase ( iter ) ;
}
else
{
// ó<> <C3B3> <EFBFBD> <EFBFBD> DB <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0 <20> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ´ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų.
m_vlUnlockZeroLevelSkills . push_back ( nSkillTableID ) ;
bSuccess = true ;
}
//if( bSuccess )
//{
// bool bFinded = false;
// int iNumPossessed = (int)m_vlPossessedSkill.size();
// for( int i = 0; i < iNumPossessed; ++i )
// {
// CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO& PossessedSkill = m_vlPossessedSkill.at( i );
// if( PossessedSkill.iSkillID == nSkillTableID )
// {
// PossessedSkill.iSkillLevel = nLevel;
// bFinded = true;
// }
// }
// if( false == bFinded )
// {
// // unlock <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> 0 ¥<> <C2A5> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ־<EFBFBD> <D6BE> ش<EFBFBD> .
// CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO SkillInfo;
// SkillInfo.iSkillID = nSkillTableID;
// SkillInfo.iSkillLevel = nLevel;
// SkillInfo.bCurrentLock = false;
// m_vlPossessedSkill.push_back( SkillInfo );
// }
//}
return bSuccess ;
}
bool CDnPlayerActor : : ExecuteSkill ( DnSkillHandle hSkill , LOCAL_TIME LocalTime , float fDelta )
{
ResetCustomAction ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ۸<EFBFBD> <20> <> <20> <> m_hAuraSkill <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// CDnActor::OnSkillExecute( LocalTime, fDelta );
DnSkillHandle hNowSkill ;
if ( m_hAuraSkill )
hNowSkill = m_hAuraSkill ;
bool bResult = CDnActor : : ExecuteSkill ( hSkill , LocalTime , fDelta ) ;
if ( m_hProcessSkill )
hNowSkill = m_hProcessSkill ;
else
if ( m_hAuraSkill )
hNowSkill = m_hAuraSkill ;
if ( bResult & & hNowSkill )
{
UpdateUseSkill ( hNowSkill ) ;
// <20> ϴ<EFBFBD> <20> ν <EFBFBD> <CEBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̺<EFBFBD> Ʈ <20> <EFBFBD> <DFBB> <EFBFBD> Ų<EFBFBD> <C5B2> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쵵 <20> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> ٸ<EFBFBD>
// <20> <> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <20> ɷ<EFBFBD> <C9B7> ش<EFBFBD> .
switch ( hNowSkill - > GetDurationType ( ) ) {
case CDnSkill : : Instantly :
break ;
default :
{
if ( m_pSession & & m_pSession - > GetMissionSystem ( ) )
{
m_pSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnSkillUse , 2 ,
EventSystem : : SkillID , hNowSkill - > GetClassID ( ) ,
EventSystem : : SkillLevel , hNowSkill - > GetLevel ( ) ) ;
}
}
break ;
}
}
# ifdef PRE_ADD_EXPORT_DPS_INFORMATION
if ( bResult & & CDnDPSReporter : : IsActive ( ) )
{
if ( CDnDPSReporter : : GetInstance ( ) . IsEnabledUser ( GetCharacterDBID ( ) ) )
{
DNVector ( DnActorHandle ) hVecList ;
ScanActor ( GetRoom ( ) , * GetPosition ( ) , 500.f , hVecList ) ;
CDnDPSReporter : : GetInstance ( ) . ReportSkillInfo ( hSkill , ( int ) hVecList . size ( ) ) ;
}
}
# endif
return bResult ;
}
void CDnPlayerActor : : OnHitSuccess ( LOCAL_TIME LocalTime , DnActorHandle hActor , HitStruct * pStruct )
{
// #33265 by kalliste
// #if defined( PRE_ADD_LOTUSGOLEM )
// if( hActor->GetHitParam()->bIgnoreShowDamage == true )
// {
// m_nComboDelay = -1;
// return;
// }
// #endif // #if defined( PRE_ADD_LOTUSGOLEM )
// #12170 <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 0<> <30> hit <20> <> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƹ<EFBFBD> <C6B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> ó<> <C3B3> .
if ( m_bAllowCalcCombo & &
0 < pStruct - > nComboDelay )
{
if ( m_nComboDelay > 0 ) {
# if defined( PRE_ADD_LOTUSGOLEM )
if ( hActor - > GetHitParam ( ) - > bIgnoreShowDamage = = false )
m_nComboCount + + ;
# else
m_nComboCount + + ;
# endif // #if defined( PRE_ADD_LOTUSGOLEM )
if ( m_nComboCount > m_nTotalComboCount )
m_nTotalComboCount = m_nComboCount ;
UpdateMaxCombo ( m_nComboCount ) ;
}
else {
m_nComboCount = 1 ;
}
m_nComboDelay = pStruct - > nComboDelay ;
if ( m_nComboDelay = = 0 ) {
m_nComboCount = 0 ;
}
}
switch ( hActor - > GetHitParam ( ) - > HitType ) {
case CDnWeapon : : Critical : UpdateCriticalHit ( ) ; break ;
case CDnWeapon : : Stun : UpdateStunHit ( ) ; break ;
}
CheckNormalHitSEProcessor ( hActor , * hActor - > GetHitParam ( ) ) ;
if ( hActor & & hActor - > IsHit ( ) & & pStruct - > szTargetHitAction ! = NULL )
{
if ( IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_246 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_246 , vlBlows ) ;
for ( DWORD i = 0 ; i < vlBlows . size ( ) ; i + + )
{
if ( vlBlows [ i ] )
{
const CDnSkill : : SkillInfo * pSkillInfo = vlBlows [ i ] - > GetParentSkillInfo ( ) ;
if ( pSkillInfo )
{
DnActorHandle hHitter = pSkillInfo - > hSkillUser ;
if ( hHitter = = hActor )
{
vlBlows [ i ] - > SetState ( STATE_BLOW : : STATE_END ) ;
SendRemoveStateEffectFromID ( vlBlows [ i ] - > GetBlowID ( ) ) ;
}
}
}
}
}
}
}
// <20> <> <20> <> <EFBFBD> Ͱ<EFBFBD> <20> <> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> ߵ Ǿ<DFB5> <C7BE> <EFBFBD> <20> <> .
void CDnPlayerActor : : OnHitProjectile ( LOCAL_TIME LocalTime , DnActorHandle hHittedTarget , const CDnDamageBase : : SHitParam & HitParam )
{
CheckNormalHitSEProcessor ( hHittedTarget , HitParam ) ;
}
void CDnPlayerActor : : CheckNormalHitSEProcessor ( DnActorHandle hHittedTarget , const CDnDamageBase : : SHitParam & HitParam )
{
// #23818 <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ξ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> ó<> <C3B3> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> "<22> <> Ÿ" <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> .
// <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> 쿣 <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ο <EFBFBD> <CEBF> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> ؼ<EFBFBD> ó<> <C3B3> .
if ( hHittedTarget )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( ( false = = IsProcessSkill ( ) | | false = = HitParam . bFromProjectileSkill ) )
{
int iNumApplySEProcessor = ( int ) m_vlpApplySEWhenNormalHitProcessor . size ( ) ;
for ( int i = 0 ; i < iNumApplySEProcessor ; + + i )
{
CDnApplySEWhenTargetNormalHitProcessor * pProcessor = static_cast < CDnApplySEWhenTargetNormalHitProcessor * > ( m_vlpApplySEWhenNormalHitProcessor . at ( i ) ) ;
pProcessor - > OnNormalHitSuccess ( hHittedTarget ) ;
}
}
}
}
void CDnPlayerActor : : OnHitFinish ( LOCAL_TIME LocalTime , HitStruct * pStruct )
{
CDnActor : : OnHitFinish ( LocalTime , pStruct ) ;
/*
if ( m_nComboDelay > 0 & & pStruct - > bFinish ) {
for ( DWORD i = 0 ; i < m_hVecLastHitList . size ( ) ; i + + ) {
if ( m_hVecLastHitList [ i ] & & m_hVecLastHitList [ i ] - > IsAir ( ) ) {
m_nChainCount + + ;
UpdateChainCombo ( ) ;
char pBuffer [ 2 ] ;
CPacketCompressStream Stream ( pBuffer , sizeof ( pBuffer ) ) ;
Stream . Write ( & m_nChainCount , sizeof ( int ) , CPacketCompressStream : : INTEGER_SHORT ) ;
Send ( eActor : : SC_CHAIN , & Stream ) ;
break ;
}
}
}
*/
int nDieCount = 0 ;
for ( DWORD i = 0 ; i < m_hVecLastHitList . size ( ) ; i + + ) {
if ( m_hVecLastHitList [ i ] & & m_hVecLastHitList [ i ] - > IsDie ( ) ) nDieCount + + ;
}
UpdateMissionByMonsterKillCount ( nDieCount ) ;
}
void CDnPlayerActor : : UpdateMissionByMonsterKillCount ( int nCount )
{
if ( nCount > = 3 ) UpdateGenocide ( ) ;
if ( nCount > = 2 & & m_pSession )
{
m_pSession - > GetEventSystem ( ) - > OnEvent ( EventSystem : : OnKillMonster , 1 ,
EventSystem : : GenocideCount , nCount ) ;
}
}
void CDnPlayerActor : : SaveUserData ( TUserData & UserData )
{
# ifndef PRE_FIX_SKILLLIST
memset ( UserData . Skill . SkillList , 0 , sizeof ( UserData . Skill . SkillList ) ) ;
if ( static_cast < CDNGameRoom * > ( GetRoom ( ) ) - > bIsPvPRoom ( ) = = false )
{
int iIndex = 0 ;
for ( UINT i = 0 ; i < m_vlhSkillList . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList [ i ] ;
if ( ! hSkill )
continue ;
UserData . Skill . SkillList [ iIndex ] . nSkillID = hSkill - > GetClassID ( ) ;
UserData . Skill . SkillList [ iIndex ] . cSkillLevel = hSkill - > GetLevel ( ) ;
UserData . Skill . SkillList [ iIndex ] . nCoolTime = static_cast < int > ( hSkill - > GetElapsedDelayTime ( ) * 1000 ) ;
+ + iIndex ;
}
}
# else
memset ( UserData . Skill [ 0 ] . SkillList , 0 , sizeof ( UserData . Skill [ 0 ] . SkillList ) ) ;
if ( static_cast < CDNGameRoom * > ( GetRoom ( ) ) - > bIsPvPRoom ( ) = = false )
{
int iIndex = 0 ;
DWORD dwNumSkill = GetSkillCount ( ) ;
for ( DWORD i = 0 ; i < dwNumSkill ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
if ( ! hSkill )
continue ;
UserData . Skill [ 0 ] . SkillList [ iIndex ] . nSkillID = hSkill - > GetClassID ( ) ;
UserData . Skill [ 0 ] . SkillList [ iIndex ] . cSkillLevel = hSkill - > GetLevel ( ) ;
UserData . Skill [ 0 ] . SkillList [ iIndex ] . nCoolTime = static_cast < int > ( hSkill - > GetElapsedDelayTime ( ) * 1000 ) ;
+ + iIndex ;
}
}
# endif // #ifndef PRE_FIX_SKILLLIST
UserData . Status . nGlyphDelayTime = ( int ) ( m_afLastEquipItemSkillDelayTime * 1000.f ) ;
UserData . Status . nGlyphRemainTime = ( int ) ( m_afLastEquipItemSkillRemainTime * 1000.f ) ;
if ( GetUserSession ( ) & & m_nInvalidPlayerCheckCounter > 0 )
{
g_Log . Log ( LogType : : _HACK , GetUserSession ( ) , L " HackChecker(DB) : CharName=%s Counter=%d \n " , GetUserSession ( ) - > GetCharacterName ( ) , m_nInvalidPlayerCheckCounter ) ;
m_pSession - > GetDBConnection ( ) - > QueryAddAbuseMonitor ( m_pSession , m_nInvalidPlayerCheckCounter , 0 ) ;
m_nInvalidPlayerCheckCounter = 0 ;
}
}
void CDnPlayerActor : : SetUserSession ( CDNUserSession * pSession )
{
m_pSession = pSession ;
m_pPartyData = pSession - > GetGameRoom ( ) - > GetPartyData ( m_pSession ) ;
// EquipDelayTime, EquipRemainTime <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⼭ <20> ׳ <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> ;;
m_afLastEquipItemSkillDelayTime = ( float ) m_pSession - > GetGlyphDelayTime ( ) / 1000.f ;
m_afLastEquipItemSkillRemainTime = ( float ) m_pSession - > GetGlyphRemainTime ( ) / 1000.f ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Կ<EFBFBD> <20> <> ġ<EFBFBD> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ִٸ<D6B4> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( m_ahEquipSkill )
m_ahEquipSkill - > SetOnceCoolTime ( m_afLastEquipItemSkillDelayTime , m_afLastEquipItemSkillRemainTime ) ;
SetAccountLevel ( m_pSession - > GetAccountLevel ( ) ) ;
}
void CDnPlayerActor : : ProcessCombo ( LOCAL_TIME LocalTime , float fDelta )
{
if ( m_nComboDelay > 0 ) m_nComboDelay - = ( int ) ( fDelta * 1000 ) ;
if ( m_nComboDelay < 0 ) {
OnComboFinish ( m_nComboCount ) ;
m_nComboCount = 0 ;
m_nComboDelay = 0 ;
}
}
void CDnPlayerActor : : OnComboFinish ( int nCombo )
{
if ( nCombo > 1 ) {
UpdateCombo ( nCombo ) ;
}
}
bool CDnPlayerActor : : IsGMTrace ( ) const
{
if ( m_pSession & & m_pSession - > bIsGMTrace ( ) )
return true ;
return false ;
}
UINT CDnPlayerActor : : GetSessionID ( )
{
return m_pSession ? m_pSession - > GetSessionID ( ) : 0 ;
}
int CDnPlayerActor : : GetMoveSpeed ( )
{
int nMoveSpeed = CDnActor : : GetMoveSpeed ( ) ;
if ( CDnWorld : : IsActive ( GetRoom ( ) ) & & ( CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapType ( ) = = EWorldEnum : : MapTypeVillage | | CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapType ( ) = = EWorldEnum : : MapTypeWorldMap ) )
nMoveSpeed + = GetSafeZoneMoveSpeed ( ) ;
if ( IsTransformMode ( ) )
{
nMoveSpeed = g_pDataManager - > GetMonsterMutationMoveSpeed ( m_nMonsterMutationTableID ) ;
if ( m_cMovePushKeyFlag & 0x08 )
nMoveSpeed / = 2 ;
return nMoveSpeed ;
}
if ( m_cMovePushKeyFlag & 0x08 ) nMoveSpeed / = 2 ;
// #62481 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> ӵ<EFBFBD> <D3B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( ! IsGhost ( ) & & ! IsBattleMode ( ) ) nMoveSpeed = ( int ) ( nMoveSpeed * 1.4f ) ;
if ( IsDie ( ) & & IsGhost ( ) ) nMoveSpeed = ( int ) ( nMoveSpeed * 1.5f ) ;
return nMoveSpeed ;
}
void CDnPlayerActor : : OnAddSkill ( DnSkillHandle hSkill , bool isInitialize /* = false*/ )
{
CDnActor : : OnAddSkill ( hSkill , isInitialize ) ;
if ( hSkill )
{
bool bFinded = false ;
int iNumPossessed = ( int ) m_vlPossessedSkill . size ( ) ;
for ( int i = 0 ; i < iNumPossessed ; + + i )
{
CDnSkillTreeSystem : : S_POSSESSED_SKILL_INFO & PossessedSkill = m_vlPossessedSkill . at ( i ) ;
if ( PossessedSkill . iSkillID = = hSkill - > GetClassID ( ) )
{
PossessedSkill . iSkillLevel = hSkill - > GetLevel ( ) ;
bFinded = true ;
}
}
if ( false = = bFinded )
{
// unlock <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> 0 ¥<> <C2A5> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ־<EFBFBD> <D6BE> ش<EFBFBD> .
CDnSkillTreeSystem : : S_POSSESSED_SKILL_INFO SkillInfo ;
SkillInfo . iSkillID = hSkill - > GetClassID ( ) ;
SkillInfo . iSkillLevel = hSkill - > GetLevel ( ) ;
SkillInfo . bCurrentLock = false ;
m_vlPossessedSkill . push_back ( SkillInfo ) ;
}
}
// <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> .(<28> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> ȹ<> <C8B9> <20> ߰ų<DFB0> <20> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> )
if ( hSkill - > GetSkillType ( ) = = CDnSkill : : EnchantPassive )
{
int iBaseSkillID = hSkill - > GetBaseSkillID ( ) ;
DnSkillHandle hBaseSkill = FindSkill ( iBaseSkillID ) ;
if ( hBaseSkill )
{
# if defined(PRE_FIX_64312)
//<2F> <> ȯ<EFBFBD> <C8AF> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , MAAiSkill<6C> <6C> <EFBFBD> <EFBFBD> UseSkill<6C> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
bool isSummonMonsterSkill = false ;
isSummonMonsterSkill = hBaseSkill - > IsSummonMonsterSkill ( ) ;
if ( isSummonMonsterSkill = = false )
hBaseSkill - > ApplyEnchantSkill ( hSkill ) ;
else
hBaseSkill - > AddSummonMonsterEnchantSkill ( hSkill ) ;
# else
hBaseSkill - > ApplyEnchantSkill ( hSkill ) ;
# endif // PRE_FIX_64312
}
}
else
{
// <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> . (<28> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> ȭ<EFBFBD> <C8AD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> )
CheckAndApplyEnchantPassiveSkill ( hSkill ) ;
}
}
void CDnPlayerActor : : OnRemoveSkill ( DnSkillHandle hSkill )
{
CDnActor : : OnRemoveSkill ( hSkill ) ;
if ( hSkill )
{
vector < CDnSkillTreeSystem : : S_POSSESSED_SKILL_INFO > : : iterator iter = m_vlPossessedSkill . begin ( ) ;
for ( iter ; iter ! = m_vlPossessedSkill . end ( ) ; + + iter )
{
if ( iter - > iSkillID = = hSkill - > GetClassID ( ) )
{
m_vlPossessedSkill . erase ( iter ) ;
break ;
}
}
}
// <20> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> нú<D0BD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <20> <> ƾ<EFBFBD> <C6BE> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ <20> <> <EFBFBD> ¸ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( CDnSkill : : EnchantPassive = = hSkill - > GetSkillType ( ) & &
0 < hSkill - > GetBaseSkillID ( ) )
{
DnSkillHandle hBaseSkill = FindSkill ( hSkill - > GetBaseSkillID ( ) ) ;
if ( hBaseSkill )
{
# if defined(PRE_FIX_64312)
//<2F> <> ȯ<EFBFBD> <C8AF> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , MAAiSkill<6C> <6C> <EFBFBD> <EFBFBD> UseSkill<6C> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
bool isSummonMonsterSkill = false ;
isSummonMonsterSkill = hBaseSkill - > IsSummonMonsterSkill ( ) ;
if ( isSummonMonsterSkill = = false )
hBaseSkill - > ReleaseEnchantSkill ( ) ;
else
hBaseSkill - > RemoveSummonMonsterEnchantSkill ( ) ;
# else
hBaseSkill - > ReleaseEnchantSkill ( ) ;
# endif // PRE_FIX_64312
}
}
// <20> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> нú<D0BD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ƾ<EFBFBD> <C6BE> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> ǹǷ<C7B9> <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
}
void CDnPlayerActor : : ProcessRecoverySP ( LOCAL_TIME LocalTime , float fDelta )
{
if ( IsDie ( ) ) {
m_fRecoverySPDelta = 0.f ;
return ;
}
m_fRecoverySPDelta + = fDelta ;
int nValue = GetSP ( ) ;
if ( m_fRecoverySPDelta > = s_fRecoverySPTime ) {
m_fRecoverySPDelta - = s_fRecoverySPTime ;
nValue + = GetRecoverySP ( ) ;
}
else return ;
if ( GetSP ( ) > = GetMaxSP ( ) ) return ;
nValue = min ( nValue , GetMaxSP ( ) ) ;
SetSP ( nValue ) ;
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & nValue , sizeof ( int ) ) ;
Send ( eActor : : SC_RECOVERYSP , & Stream ) ;
}
void CDnPlayerActor : : CmdToggleWeaponViewOrder ( int nEquipIndex , bool bShowCash )
{
SetWeaponViewOrder ( nEquipIndex , bShowCash ) ;
RefreshWeaponViewOrder ( nEquipIndex ) ;
if ( m_pSession )
{
m_pSession - > SetViewCashEquipBitmap ( CASHEQUIP_WEAPON1 + nEquipIndex , bShowCash ) ;
}
}
void CDnPlayerActor : : CmdTogglePartsViewOrder ( int nEquipIndex , bool bShowCash )
{
if ( ( nEquipIndex < 0 ) | | ( nEquipIndex > = _countof ( m_bPartsViewOrder ) ) )
return ;
SetPartsViewOrder ( nEquipIndex , bShowCash ) ;
RefreshPartsViewOrder ( nEquipIndex ) ;
if ( m_pSession )
m_pSession - > SetViewCashEquipBitmap ( nEquipIndex , bShowCash ) ;
}
void CDnPlayerActor : : CmdToggleHideHelmet ( bool bHideHelmet )
{
if ( m_pSession )
m_pSession - > SetViewCashEquipBitmap ( HIDEHELMET_BITINDEX , bHideHelmet ) ;
}
void CDnPlayerActor : : CmdChangeJob ( int nJobID )
{
SetJobHistory ( nJobID ) ;
OnChangeJob ( nJobID ) ;
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & nJobID , sizeof ( int ) ) ;
Send ( eActor : : SC_CHANGEJOB , m_pSession - > GetSessionID ( ) , & Stream ) ;
}
void CDnPlayerActor : : CmdEscape ( EtVector3 & vPos )
{
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
Stream . Write ( & vPos , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
Send ( eActor : : SC_CMDESCAPE , & Stream ) ;
}
void CDnPlayerActor : : ToggleGhostMode ( bool bGhost )
{
if ( bGhost = = m_bGhost ) return ;
m_bGhost = bGhost ;
if ( bGhost = = true & & GetSP ( ) > 0 )
SetSP ( 0 ) ;
# ifdef PRE_FIX_GAMESERVER_USE_GHOST_MODE
bool bGhostMode = true ;
CDnGameTask * pGameTask = m_pSession - > GetGameRoom ( ) - > GetGameTask ( ) ;
if ( pGameTask & & pGameTask - > GetGameTaskType ( ) = = GameTaskType : : PvP )
{
bGhostMode = false ;
CDNGameRoom * pGameRoom = GetGameRoom ( ) ;
# if defined(PRE_ADD_PVP_TOURNAMENT)
if ( pGameRoom & & pGameRoom - > GetPvPGameMode ( ) & & ( pGameRoom - > GetPvPGameMode ( ) - > bIsAllKillMode ( ) | | pGameRoom - > GetPvPGameMode ( ) - > bIsTournamentMode ( ) ) )
# else
if ( pGameRoom & & pGameRoom - > GetPvPGameMode ( ) & & pGameRoom - > GetPvPGameMode ( ) - > bIsAllKillMode ( ) )
# endif //#if defined(PRE_ADD_PVP_TOURNAMENT)
bGhostMode = true ;
}
if ( ! bGhostMode )
{
if ( bGhost )
{
if ( IsMovable ( ) | | IsStay ( ) )
{
SetAction ( " Die " , 0.f , 0.f , false ) ;
}
}
else
{
std : : string szActionName = " Stand " ;
if ( m_bShootMode )
szActionName = " MOD_Stand " ;
if ( IsTransformMode ( ) )
{
if ( IsExistAction ( " Summon_On " ) )
szActionName = " Summon_On " ;
}
SetAction ( szActionName . c_str ( ) , 0.f , 0.f ) ;
}
}
else
{
if ( bGhost )
{
SwapSingleSkin ( 499 + m_nClassID ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
}
else
{
SwapSingleSkin ( - 1 ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
}
}
# endif
if ( m_bGhost & & GetGameRoom ( ) & & GetGameRoom ( ) - > GetGameTask ( ) )
GetGameRoom ( ) - > GetGameTask ( ) - > OnGhost ( GetActorHandle ( ) ) ;
}
void CDnPlayerActor : : _CheckProcessSkillActioncChange ( const char * pAction )
{
// #26467 <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> õǰ<C3B5> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӿ<EFBFBD> <20> <> <EFBFBD> ŵǹǷ<C7B9> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ؼ<EFBFBD> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <20> ƴϸ<C6B4> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( m_hProcessSkill )
{
m_setUseActionName . clear ( ) ;
m_setUseActionName . insert ( pAction ) ;
if ( false = = m_hProcessSkill - > IsUseActionNames ( m_setUseActionName ) )
{
if ( false = = ( IsEnabledAuraSkill ( ) & & m_hProcessSkill - > IsAuraOn ( ) ) )
{
m_hProcessSkill - > OnEnd ( CDnActionBase : : m_LocalTime , 0.f ) ;
}
m_hProcessSkill . Identity ( ) ;
}
}
}
void CDnPlayerActor : : _CheckActionWithProcessPassiveActionSkill ( const char * szPrevAction )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> ݺ<EFBFBD> <DDBA> <EFBFBD> <EFBFBD> ̸<EFBFBD> <20> н<EFBFBD>
if ( szPrevAction & & m_nPrevActionIndex = = m_nActionIndex )
return ;
// if instantly passive skill, then cancel skill. ( ex) archer's spinkick)
// because state effect must deactivate when change to another attack action.
if ( m_hProcessSkill )
{
m_setUseActionName . clear ( ) ;
m_setUseActionName . insert ( szPrevAction ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> prev <20> <EFBFBD> <D7BC> <EFBFBD> next <20> <EFBFBD> <D7BC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ̾<EFBFBD> <CCBE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> next <20> <EFBFBD> <D7BC> <EFBFBD> <20> ƴ϶<C6B4> <CFB6> <EFBFBD>
// <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <C7B4> Ѵ <EFBFBD> .
ActionElementStruct * pElement = GetElement ( szPrevAction ) ;
bool bIsNextAction = false ;
if ( pElement )
{
// #25154 <20> ⺻ <20> <> <EFBFBD> ĵ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> next <20> <EFBFBD> <D7BC> <EFBFBD> <20> ̾<EFBFBD> <CCBE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> ȣ <> <C8A3> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> Stand <20> <> <20> Ǿ<EFBFBD> <C7BE> ִµ<D6B4> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// m_hProcessSkill <20> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǴܵǾ NULL <20> <> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> .
// m_hProcessSkill <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> onend <20> <> <20> <> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> bIsNextAction <20> <> false <20> <> <20> ǰ<EFBFBD> m_hProcessSkill->IsUseSkillActionNames() <20> Լ<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <CEBF> <EFBFBD>
// <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǴܵǾ<DCB5> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> .
bIsNextAction = ( ( pElement - > szNextActionName ! = " Stand " ) & & ( pElement - > szNextActionName = = GetCurrentAction ( ) ) ) ;
}
if ( false = = bIsNextAction & &
m_hProcessSkill - > IsUseActionNames ( m_setUseActionName ) )
{
// <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų<EFBFBD> <C5B3> <20> нú<D0BD> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> ϵǾ<CFB5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> , GetPassiveSkillLengh() <20> <> <20> ˼<EFBFBD> <CBBC> ִ<EFBFBD> .
if ( ( ( m_hProcessSkill - > GetSkillType ( ) = = CDnSkill : : Passive | | m_hProcessSkill - > GetPassiveSkillLength ( ) ! = 0.f ) | | m_hProcessSkill - > GetSkillType ( ) = = CDnSkill : : AutoPassive ) & &
m_hProcessSkill - > GetDurationType ( ) = = CDnSkill : : Instantly )
{
// <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> ü<> <C3BC> <20> Է<EFBFBD> <D4B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> Ѵ <EFBFBD> . <20> ѹ<EFBFBD> üũ<C3BC> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ü<> <C3BC> <20> Է<EFBFBD> <20> ÷<EFBFBD> <C3B7> ״<EFBFBD> <20> ʱ<EFBFBD> ȭ<EFBFBD> ȴ<EFBFBD> .
// ü<> <C3BC> <EFBFBD> ԷµǴ<C2B5> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> ŭ <20> нú<D0BD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̰<EFBFBD> <20> þ<C3BE> <EEB3AD> .
// <20> ̷<EFBFBD> <CCB7> <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> ð<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ü<> <C3BC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( false = = m_hProcessSkill - > CheckChainingPassiveSkill ( ) )
{
if ( false = = m_hProcessSkill - > IsChainInputAction ( GetCurrentAction ( ) ) )
{
m_hProcessSkill - > OnEnd ( MAActorRenderBase : : m_LocalTime , 0.0f ) ;
m_hProcessSkill . Identity ( ) ;
}
}
}
else if ( IsEnabledAuraSkill ( ) & & m_hProcessSkill - > IsAuraOn ( ) )
{
// Note <20> ѱ<EFBFBD> : m_hProcessSkill <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> ؾ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CDnPlayerActor::CmdStop() <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> <20> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// ó<> <C3B3> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CDnActor::OnChangeAction <20> ʿ<EFBFBD> <CABF> <EFBFBD> ProcessAction <20> <> Identity <20> <> Ŵ.
m_hProcessSkill . Identity ( ) ;
ClearSelfStateSignalBlowQueue ( ) ; // <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Ÿ<> ̹<EFBFBD> <20> ñ׳ ο <D7B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> ť <20> ʱ<EFBFBD> ȭ <20> <> Ŵ. <20> ȱ<C8B1> <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
}
}
}
}
void CDnPlayerActor : : OnChangeAction ( const char * szPrevAction )
{
// 129<32> <39> <20> <EFBFBD> <20> ̸<EFBFBD> <20> <> ü <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Ȱ<> <C8B0> <20> <> Ȱ<EFBFBD> <C8B0> ó<> <C3B3> . /////////////////////////////////////////////////
if ( m_pStateBlow - > IsApplied ( STATE_BLOW : : BLOW_129 ) )
{
DNVector ( DnBlowHandle ) vlhChangeActionSetBlow ;
m_pStateBlow - > GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_129 , vlhChangeActionSetBlow ) ;
// <20> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> .
int iNumBlow = ( int ) vlhChangeActionSetBlow . size ( ) ;
for ( int i = 0 ; i < iNumBlow ; + + i )
{
if ( ! vlhChangeActionSetBlow [ i ] )
continue ;
CDnChangeActionSetBlow * pChangeActionSetBlow = static_cast < CDnChangeActionSetBlow * > ( vlhChangeActionSetBlow . at ( i ) . GetPointer ( ) ) ;
pChangeActionSetBlow - > UpdateEnable ( szPrevAction , GetCurrentAction ( ) ) ;
// <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> Լ<EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// Ŭ<> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ̹<EFBFBD> <20> <> ȯ<EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> ƿ<EFBFBD> <C6BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
CDnChangeActionStrProcessor * pProcessor = pChangeActionSetBlow - > GetChangeActionStrProcessor ( ) ; // <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> Ȱ<EFBFBD> <C8B0> ȭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> NULL <20> <> <EFBFBD> ϵ<EFBFBD> .
if ( pProcessor & & pProcessor - > IsChangedActionName ( GetCurrentAction ( ) ) )
{
pChangeActionSetBlow - > OnChangeAction ( ) ;
}
else
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> ó<> <C3B3> <EFBFBD> Ǵ<EFBFBD> setaction <20> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
pChangeActionSetBlow - > OnNotChangeAction ( ) ;
}
}
}
_CheckActionWithProcessPassiveActionSkill ( szPrevAction ) ;
//CDnActor::OnChangeAction( szPrevAction );
if ( ! ( szPrevAction & & m_nPrevActionIndex = = m_nActionIndex ) ) {
if ( CDnWorld : : IsActive ( GetRoom ( ) ) ) {
CDnWorld : : GetInstance ( GetRoom ( ) ) . InsertTriggerEventStore ( " ChangeActionPlayer " , GetUniqueID ( ) ) ;
CDnWorld : : GetInstance ( GetRoom ( ) ) . OnTriggerEventCallback ( " CDnPlayerActor::OnChangeAction " , CDnActionBase : : m_LocalTime , 0.f ) ;
}
}
m_bUseSignalSkillCheck = false ;
ZeroMemory ( m_abSignalSkillCheck , sizeof ( m_abSignalSkillCheck ) ) ;
// mixed <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> mixed <20> <EFBFBD> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <20> <> <EFBFBD> <EFBFBD> .
if ( false = = m_bUpdatedProjectileInfoFromCmdAction )
{
if ( false = = IsCustomAction ( ) )
_UpdateMaxProjectileCount ( m_nActionIndex ) ;
}
else
m_bUpdatedProjectileInfoFromCmdAction = false ; // <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> OnChangeAction() ȣ <> <C8A3> <EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ־<EFBFBD> <D6BE> <EFBFBD> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <20> <> üũ<C3BC> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
m_bCheckProjectileSignalTerm = true ;
if ( false = = m_mapIcyFractionHitted . empty ( ) )
m_mapIcyFractionHitted . clear ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <20> ˷<EFBFBD> <CBB7> <EFBFBD> . <20> <> ī<EFBFBD> <C4AB> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 찡..
boost : : shared_ptr < IDnObserverNotifyEvent > pEvent ( IDnObserverNotifyEvent : : Create ( EVENT_ONCHANGEACTION ) ) ;
Notify ( pEvent ) ;
}
void CDnPlayerActor : : OnBreakSkillSuperAmmor ( int nIndex , int nOriginalSupperAmmor , int nDescreaseSupperAmmor )
{
if ( nOriginalSupperAmmor > = 200 ) {
UpdateSuperAmmorBreak ( ) ;
}
}
void CDnPlayerActor : : OnAirCombo ( int nComboCount )
{
if ( nComboCount > = 2 ) {
UpdateAirCombo ( ) ;
}
}
void CDnPlayerActor : : PushSummonMonster ( DnMonsterActorHandle hMonster , const SummonMonsterStruct * pSummonMonsterStruct , bool bReCreateFollowStageMonster /* = false*/ )
{
CDnActor : : PushSummonMonster ( hMonster , pSummonMonsterStruct , bReCreateFollowStageMonster ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (bReCreateFollowStageMonster)
// <20> ش<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> ־<EFBFBD> <D6BE> ش<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> ϸ鼭 CDnActor::bIsCanSummonMonster() <20> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ü <20> ڵ<EFBFBD> <DAB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ȴ<EFBFBD> .
if ( 0 < pSummonMonsterStruct - > nGroupID )
{
m_mapSummonMonsterByGroup [ pSummonMonsterStruct - > nGroupID ] . push_back ( hMonster ) ;
hMonster - > SetSummonGroupID ( pSummonMonsterStruct - > nGroupID ) ;
}
if ( bReCreateFollowStageMonster )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> ü.
DWORD dwMonsterClassID = hMonster - > GetMonsterClassID ( ) ;
std : : list < S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO > : : iterator iter = m_listSummonedMonstersFollowStageInfos . begin ( ) ;
for ( iter ; iter ! = m_listSummonedMonstersFollowStageInfos . end ( ) ; + + iter )
{
if ( false = = iter - > bReCreatedFollowStageMonster & &
dwMonsterClassID = = iter - > dwMonsterClassID )
{
iter - > hMonster = hMonster ;
iter - > hMonster - > SetActionQueue ( " Stand " ) ; // <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϹ Ƿ<CFB9> <20> <> <EFBFBD> ٷ<EFBFBD> stand <20> <EFBFBD> .
iter - > hMonster - > CmdWarp ( * GetPosition ( ) , EtVec3toVec2 ( * GetLookDir ( ) ) ) ;
iter - > bReCreatedFollowStageMonster = true ;
break ;
}
}
}
else
{
// <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> ̳<EFBFBD> <20> <> <20> ̵<EFBFBD> (CmdWarp) <20> <> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <F3B0A1B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯü<C8AF> <C3BC>
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( pSummonMonsterStruct - > bFollowSummonerStage )
{
S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO Info ;
Info . hMonster = hMonster ;
Info . dwMonsterClassID = hMonster - > GetMonsterClassID ( ) ;
# ifdef PRE_FIX_MEMOPT_SIGNALH
CopyShallow_SummonMonsterStruct ( Info . SummonMonsterSignalData , pSummonMonsterStruct ) ;
# else
Info . SummonMonsterSignalData = * pSummonMonsterStruct ;
# endif
Info . iRemainDestroyTime = pSummonMonsterStruct - > nLifeTime ;
m_listSummonedMonstersFollowStageInfos . push_back ( Info ) ;
}
}
}
// <20> <> ȯ<EFBFBD> <C8AF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <20> Ǿ<EFBFBD> <C7BE> ų<EFBFBD> HP <20> <> 0 <20> <> <20> Ǿ<EFBFBD> <20> ״<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> .
// <20> <> <20> ΰ<EFBFBD> <CEB0> <EFBFBD> <20> <> <EFBFBD> 쿡 <20> <> <EFBFBD> ؼ<EFBFBD> <D8BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> ı <EFBFBD> <C4B1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
void CDnPlayerActor : : OnDieSummonedMonster ( DnMonsterActorHandle hSummonedMonster )
{
std : : list < S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO > : : iterator iter = m_listSummonedMonstersFollowStageInfos . begin ( ) ;
for ( iter ; iter ! = m_listSummonedMonstersFollowStageInfos . end ( ) ; + + iter )
{
if ( hSummonedMonster = = iter - > hMonster )
{
m_listSummonedMonstersFollowStageInfos . erase ( iter ) ;
break ;
}
}
int iGroupID = hSummonedMonster - > GetSummonGroupID ( ) ;
if ( 0 < m_mapSummonMonsterByGroup . count ( iGroupID ) )
{
list < DnMonsterActorHandle > & listSummonedMonsters = m_mapSummonMonsterByGroup [ iGroupID ] ;
list < DnMonsterActorHandle > : : iterator iter = find ( listSummonedMonsters . begin ( ) , listSummonedMonsters . end ( ) , hSummonedMonster ) ;
if ( listSummonedMonsters . end ( ) ! = iter )
listSummonedMonsters . erase ( iter ) ;
// <20> ش<EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( listSummonedMonsters . empty ( ) )
m_mapSummonMonsterByGroup . erase ( iGroupID ) ;
}
# if defined(PRE_ADD_65808)
if ( hSummonedMonster )
{
CDnMonsterActor * pMonsterActor = static_cast < CDnMonsterActor * > ( hSummonedMonster . GetPointer ( ) ) ;
if ( pMonsterActor )
{
RemoveSummonMonsterGlyphStateEffects ( pMonsterActor - > GetMonsterClassID ( ) ) ;
}
}
# endif // PRE_ADD_65808
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> ȴ<EFBFBD> .
// <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⼭ <20> ̾Ƴ<CCBE> <C6B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ´ <D6B4> .
void CDnPlayerActor : : OnBeforeDestroyStageMonsters ( void )
{
std : : list < S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO > : : iterator iter = m_listSummonedMonstersFollowStageInfos . begin ( ) ;
for ( iter ; iter ! = m_listSummonedMonstersFollowStageInfos . end ( ) ; )
{
// <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <DAB5> <EFBFBD> invalid <20> <> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( iter - > hMonster )
{
iter - > iRemainDestroyTime = iter - > hMonster - > GetRemainDestroyTime ( ) ;
iter - > bReCreatedFollowStageMonster = false ;
// TODO: <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ƶ<DEBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ƶд<C6B5> .
+ + iter ;
}
else
{
iter = m_listSummonedMonstersFollowStageInfos . erase ( iter ) ;
}
}
}
void CDnPlayerActor : : OnInitializeNextStageFinished ( void )
{
// <20> <> ȯ<EFBFBD> <C8AF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ŵ<EFBFBD> <20> ͵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> . STE_SummonMonster <20> ñ׳ <C3B1> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CDnGameTask * pTask = ( CDnGameTask * ) CTaskManager : : GetInstance ( GetRoom ( ) ) . GetTask ( " GameTask " ) ;
std : : list < S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO > : : iterator iter = m_listSummonedMonstersFollowStageInfos . begin ( ) ;
for ( iter ; iter ! = m_listSummonedMonstersFollowStageInfos . end ( ) ; + + iter )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PushMonster() <20> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> Ÿ<EFBFBD> <20> ̷<EFBFBD> <CCB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// <20> ٽ<EFBFBD> <20> <> ȯ<EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
iter - > SummonMonsterSignalData . nLifeTime = ( int ) iter - > iRemainDestroyTime ;
pTask - > RequestSummonMonster ( GetMySmartPtr ( ) , & ( iter - > SummonMonsterSignalData ) , true ) ;
}
# ifdef PRE_ADD_WEEKLYEVENT
RemoveEventStateBlow ( ) ;
ApplyEventStateBlow ( ) ;
# endif
# if defined( PRE_FIX_70618 )
if ( IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_078 ) )
CmdRemoveStateEffect ( STATE_BLOW : : BLOW_078 ) ;
# endif // #if defined( PRE_FIX_70618 )
}
bool CDnPlayerActor : : _bIsMasterSystemDurabilityReward ( )
{
if ( GetGameRoom ( ) & & GetGameRoom ( ) - > GetMasterRewardSystem ( ) )
{
if ( GetGameRoom ( ) - > GetMasterRewardSystem ( ) - > bIsDurabilityReward ( m_pSession ) )
{
# if defined( _WORK )
WCHAR wszBuf [ MAX_PATH ] ;
wsprintf ( wszBuf , L " [<5B> <> <EFBFBD> <EFBFBD> <EFBFBD> ý<EFBFBD> <C3BD> <EFBFBD> ] <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> " ) ;
m_pSession - > SendDebugChat ( wszBuf ) ;
# endif // #if defined( _WORK )
return true ;
}
}
return false ;
}
void CDnPlayerActor : : OnRepairEquipDurability ( bool bDBSave , INT64 nPriceCoin )
{
bool bRefreshStatus = false ;
std : : vector < INT64 > VecSerialList ;
std : : vector < USHORT > VecDurList ;
VecSerialList . clear ( ) ;
VecDurList . clear ( ) ;
for ( int i = CDnParts : : Helmet ; i < = CDnParts : : Ring2 ; i + + ) {
DnPartsHandle hParts = GetParts ( ( CDnParts : : PartsTypeEnum ) i ) ;
if ( ! hParts ) continue ;
if ( hParts - > IsInfinityDurability ( ) ) continue ;
if ( hParts - > GetDurability ( ) = = hParts - > GetMaxDurability ( ) ) continue ;
int nTemp = hParts - > GetMaxDurability ( ) ;
hParts - > SetDurability ( nTemp ) ;
bRefreshStatus = true ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( i , nTemp , true ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > wDur ) ;
}
}
for ( int i = 0 ; i < 2 ; i + + ) {
DnWeaponHandle hWeapon = m_hWeapon [ i ] ;
if ( ! hWeapon ) continue ;
if ( hWeapon - > IsInfinityDurability ( ) ) continue ;
if ( hWeapon - > GetDurability ( ) = = hWeapon - > GetMaxDurability ( ) ) continue ;
int nTemp = hWeapon - > GetMaxDurability ( ) ;
hWeapon - > SetDurability ( nTemp ) ;
bRefreshStatus = true ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( EQUIP_WEAPON1 + i , nTemp , true ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > wDur ) ;
}
}
if ( bRefreshStatus ) {
RefreshState ( RefreshEquip , ST_All ) ;
}
if ( bDBSave )
{
INT64 biCurrentCoin = 0 ;
INT64 biPickUpCoin = 0 ;
if ( nPriceCoin > 0 )
{
biCurrentCoin = m_pSession - > GetCoin ( ) ;
biPickUpCoin = m_pSession - > GetPickUpCoin ( ) ;
m_pSession - > SelPickUpCoin ( 0 ) ;
}
m_pSession - > GetDBConnection ( ) - > QueryModItemDurability ( m_pSession , nPriceCoin , VecSerialList , VecDurList , biCurrentCoin , biPickUpCoin ) ;
}
}
void CDnPlayerActor : : OnDecreaseEquipDurability ( int nValue , bool bDBSave )
{
if ( _bIsMasterSystemDurabilityReward ( ) )
return ;
bool bRefreshStatus = false ;
std : : vector < INT64 > VecSerialList ;
std : : vector < USHORT > VecDurList ;
VecSerialList . clear ( ) ;
VecDurList . clear ( ) ;
for ( int i = CDnParts : : Helmet ; i < = CDnParts : : Ring2 ; i + + ) {
DnPartsHandle hParts = GetParts ( ( CDnParts : : PartsTypeEnum ) i ) ;
if ( ! hParts ) continue ;
if ( hParts - > IsInfinityDurability ( ) ) continue ;
if ( hParts - > GetDurability ( ) = = 0 ) continue ;
int nTemp = hParts - > GetDurability ( ) - nValue ;
if ( nTemp < = 0 ) {
nTemp = 0 ;
bRefreshStatus = true ;
}
hParts - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > wDur ) ;
}
}
for ( int i = 0 ; i < 2 ; i + + ) {
DnWeaponHandle hWeapon = m_hWeapon [ i ] ;
if ( ! hWeapon ) continue ;
if ( hWeapon - > IsInfinityDurability ( ) ) continue ;
if ( hWeapon - > GetDurability ( ) = = 0 ) continue ;
int nTemp = hWeapon - > GetDurability ( ) - nValue ;
if ( nTemp < = 0 ) {
nTemp = 0 ;
bRefreshStatus = true ;
}
hWeapon - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( EQUIP_WEAPON1 + i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > wDur ) ;
}
}
if ( bRefreshStatus ) {
RefreshState ( RefreshEquip , ST_All ) ;
}
if ( bDBSave )
m_pSession - > GetDBConnection ( ) - > QueryModItemDurability ( m_pSession , 0 , VecSerialList , VecDurList ) ;
}
void CDnPlayerActor : : OnDecreaseEquipDurability ( float fValue , bool bDBSave )
{
if ( _bIsMasterSystemDurabilityReward ( ) )
return ;
bool bRefreshStatus = false ;
std : : vector < INT64 > VecSerialList ;
std : : vector < USHORT > VecDurList ;
VecSerialList . clear ( ) ;
VecDurList . clear ( ) ;
# if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
float fTotalLevelValue = 0.0f ;
if ( m_pRoom - > bIsPvPRoom ( ) = = false & & IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_259 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_259 , vlBlows ) ;
{
int nCount = ( int ) vlBlows . size ( ) ;
for ( int i = 0 ; i < nCount ; + + i )
{
DnBlowHandle hBlow = vlBlows [ i ] ;
if ( hBlow & & hBlow - > IsEnd ( ) = = false )
{
fTotalLevelValue + = hBlow - > GetFloatValue ( ) ;
}
}
}
}
# endif
for ( int i = CDnParts : : Helmet ; i < = CDnParts : : Ring2 ; i + + ) {
DnPartsHandle hParts = GetParts ( ( CDnParts : : PartsTypeEnum ) i ) ;
if ( ! hParts ) continue ;
if ( hParts - > IsInfinityDurability ( ) ) continue ;
if ( hParts - > GetDurability ( ) = = 0 ) continue ;
# if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
int nTemp = ( int ) ( hParts - > GetDurability ( ) - ( ( hParts - > GetMaxDurability ( ) * fValue ) * ( 1 - fTotalLevelValue ) ) ) ;
# else
int nTemp = ( int ) ( hParts - > GetDurability ( ) - ( hParts - > GetMaxDurability ( ) * fValue ) ) ;
# endif
if ( nTemp < = 0 ) {
nTemp = 0 ;
bRefreshStatus = true ;
}
hParts - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( i ) - > wDur ) ;
}
}
for ( int i = 0 ; i < 2 ; i + + ) {
DnWeaponHandle hWeapon = m_hWeapon [ i ] ;
if ( ! hWeapon ) continue ;
if ( hWeapon - > IsInfinityDurability ( ) ) continue ;
if ( hWeapon - > GetDurability ( ) = = 0 ) continue ;
# if defined( PRE_ADD_TOTAL_LEVEL_SKILL )
int nTemp = ( int ) ( hWeapon - > GetDurability ( ) - ( ( hWeapon - > GetMaxDurability ( ) * fValue ) * ( 1 - fTotalLevelValue ) ) ) ;
# else
int nTemp = ( int ) ( hWeapon - > GetDurability ( ) - ( hWeapon - > GetMaxDurability ( ) * fValue ) ) ;
# endif
if ( nTemp < = 0 ) {
nTemp = 0 ;
bRefreshStatus = true ;
}
hWeapon - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetEquipItemDurability ( EQUIP_WEAPON1 + i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetEquip ( EQUIP_WEAPON1 + i ) - > wDur ) ;
}
}
if ( bRefreshStatus ) {
RefreshState ( RefreshEquip , ST_All ) ;
}
if ( bDBSave )
m_pSession - > GetDBConnection ( ) - > QueryModItemDurability ( m_pSession , 0 , VecSerialList , VecDurList ) ;
}
void CDnPlayerActor : : OnDecreaseInvenDurability ( int nValue , bool bDBSave )
{
if ( _bIsMasterSystemDurabilityReward ( ) )
return ;
std : : vector < INT64 > VecSerialList ;
std : : vector < USHORT > VecDurList ;
VecSerialList . clear ( ) ;
VecDurList . clear ( ) ;
for ( int i = 0 ; i < INVENTORYMAX ; i + + ) {
const TItem * pItem = m_pSession - > GetItem ( ) - > GetInventory ( i ) ;
if ( ! pItem ) continue ;
switch ( g_pDataManager - > GetItemMainType ( pItem - > nItemID ) ) {
case ITEMTYPE_WEAPON :
{
CDnWeapon * pWeapon = static_cast < CDnWeapon * > ( m_pPartyData - > pInventory [ i ] ) ;
if ( ! pWeapon ) continue ;
if ( pWeapon - > IsInfinityDurability ( ) ) continue ;
if ( pWeapon - > GetDurability ( ) = = 0 ) continue ;
int nTemp = pWeapon - > GetDurability ( ) - nValue ;
if ( nTemp < = 0 ) nTemp = 0 ;
pWeapon - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetInvenItemDurability ( i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetInventory ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > wDur ) ;
}
}
break ;
case ITEMTYPE_PARTS :
{
CDnParts * pParts = static_cast < CDnParts * > ( m_pPartyData - > pInventory [ i ] ) ;
if ( pParts - > IsInfinityDurability ( ) ) continue ;
if ( pParts - > GetDurability ( ) = = 0 ) continue ;
int nTemp = pParts - > GetDurability ( ) - nValue ;
if ( nTemp < = 0 ) nTemp = 0 ;
pParts - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetInvenItemDurability ( i , nTemp ) ;
if ( bDBSave & & m_pSession - > GetItem ( ) - > GetInventory ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > wDur ) ;
}
}
break ;
default :
continue ;
}
}
if ( bDBSave )
m_pSession - > GetDBConnection ( ) - > QueryModItemDurability ( m_pSession , 0 , VecSerialList , VecDurList ) ;
}
void CDnPlayerActor : : OnDecreaseInvenDurability ( float fValue , bool bDBSave )
{
if ( _bIsMasterSystemDurabilityReward ( ) )
return ;
std : : vector < INT64 > VecSerialList ;
std : : vector < USHORT > VecDurList ;
VecSerialList . clear ( ) ;
VecDurList . clear ( ) ;
for ( int i = 0 ; i < INVENTORYMAX ; i + + ) {
const TItem * pItem = m_pSession - > GetItem ( ) - > GetInventory ( i ) ;
if ( ! pItem ) continue ;
switch ( g_pDataManager - > GetItemMainType ( pItem - > nItemID ) ) {
case ITEMTYPE_WEAPON :
{
CDnWeapon * pWeapon = static_cast < CDnWeapon * > ( m_pPartyData - > pInventory [ i ] ) ;
if ( ! pWeapon ) continue ;
if ( pWeapon - > IsInfinityDurability ( ) ) continue ;
if ( pWeapon - > GetDurability ( ) = = 0 ) continue ;
int nTemp = ( int ) ( pWeapon - > GetDurability ( ) - ( pWeapon - > GetMaxDurability ( ) * fValue ) ) ;
if ( nTemp < = 0 ) nTemp = 0 ;
pWeapon - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetInvenItemDurability ( i , nTemp ) ;
if ( m_pSession - > GetItem ( ) - > GetInventory ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > wDur ) ;
}
}
break ;
case ITEMTYPE_PARTS :
{
CDnParts * pParts = static_cast < CDnParts * > ( m_pPartyData - > pInventory [ i ] ) ;
if ( ! pParts ) continue ;
if ( pParts - > IsInfinityDurability ( ) ) continue ;
if ( pParts - > GetDurability ( ) = = 0 ) continue ;
int nTemp = ( int ) ( pParts - > GetDurability ( ) - ( pParts - > GetMaxDurability ( ) * fValue ) ) ;
if ( nTemp < = 0 ) nTemp = 0 ;
pParts - > SetDurability ( nTemp ) ;
m_pSession - > GetItem ( ) - > SetInvenItemDurability ( i , nTemp ) ;
if ( m_pSession - > GetItem ( ) - > GetInventory ( i ) ) {
VecSerialList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > nSerial ) ;
VecDurList . push_back ( m_pSession - > GetItem ( ) - > GetInventory ( i ) - > wDur ) ;
}
}
break ;
default :
continue ;
}
}
m_pSession - > GetDBConnection ( ) - > QueryModItemDurability ( m_pSession , 0 , VecSerialList , VecDurList ) ;
}
bool CDnPlayerActor : : IsPenaltyStageGiveUp ( )
{
if ( ! m_pRoom ) return false ;
switch ( m_pRoom - > GetGameTaskType ( ) ) {
case GameTaskType : : PvP : return false ;
case GameTaskType : : DarkLair : return false ;
case GameTaskType : : Farm : return false ;
default : break ;
}
if ( IsDie ( ) )
return false ;
if ( CDnWorld : : IsActive ( GetRoom ( ) ) )
{
EWorldEnum : : MapTypeEnum mapType = CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapType ( ) ;
if ( mapType = = EWorldEnum : : MapTypeDungeon )
{
CDnGameTask * pTask = ( CDnGameTask * ) CTaskManager : : GetInstance ( GetRoom ( ) ) . GetTask ( " GameTask " ) ;
if ( pTask - > GetDungeonClearState ( ) = = CDnGameTask : : DCS_WarpStandBy )
return false ;
}
else
{
return false ;
}
}
return true ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ұ<EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> return true; <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> return false;
bool CDnPlayerActor : : OnStageGiveUp ( )
{
if ( IsPenaltyStageGiveUp ( ) = = false )
return false ;
DNTableFileFormat * pDungeonSox = GetDNTable ( CDnTableDB : : TDUNGEONENTER ) ;
if ( pDungeonSox - > GetFieldFromLablePtr ( GetGameRoom ( ) - > GetGameTask ( ) - > GetDungeonEnterTableID ( ) , " _StageOutDurability " ) - > GetInteger ( ) = = 0 )
return false ;
OnDecreaseEquipDurability ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : StageGiveupDurabilityPenalty ) , true ) ;
OnDecreaseInvenDurability ( CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : StageGiveupDurabilityPenalty ) , true ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Equip <20> ̾<EFBFBD> <20> ˾Ƽ <CBBE> <20> <> <EFBFBD> ŵ<EFBFBD> <C5B5> <EFBFBD> <EFBFBD> <EFBFBD> <20> κ<EFBFBD> <CEBA> 丮<EFBFBD> <E4B8AE> <20> <EFBFBD> <D7B7> <EFBFBD> <20> ʽ <EFBFBD> <CABD> ϴ<EFBFBD> . <20> <EFBFBD> <D7B7> <EFBFBD> <20> ˷<EFBFBD> <CBB7> <EFBFBD> <EFBFBD> <EFBFBD> <20> մϴ<D5B4> .
if ( m_pSession ) {
float fRatio = CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : StageGiveupDurabilityPenalty ) ;
m_pSession - > SendDecreaseDurabilityInventory ( 1 , ( void * ) & fRatio ) ;
}
return true ;
}
void CDnPlayerActor : : RecvPartyRefreshGateInfo ( const EtVector3 & Pos )
{
SetPosition ( Pos ) ;
SetStaticPosition ( Pos ) ;
}
bool CDnPlayerActor : : AttachParts ( DnPartsHandle hParts , CDnParts : : PartsTypeEnum Index , bool bDelete )
{
if ( ! hParts )
return false ;
bool bResult = MAPartsBody : : AttachParts ( hParts , Index , bDelete ) ;
# if defined(_GAMESERVER)
int nSkillID = - 1 ;
int nSkillLevel = 0 ;
if ( hParts - > HasPrefixSkill ( nSkillID , nSkillLevel ) )
{
DnSkillHandle hSkill = CDnSkill : : CreateSkill ( GetMySmartPtr ( ) , nSkillID , nSkillLevel ) ;
if ( ! hSkill )
{
OutputDebug ( " %s ==> SkillID %d, SkillLevel %d... CreateSkill Failed!!!! \n " , __FUNCTION__ , nSkillID , nSkillLevel ) ;
}
else
{
# if defined(PRE_ADD_PREFIXSKILL_PVP)
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> pve/pvp <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
int iSkillLevelDataType = CDnSkill : : PVE ;
if ( GetGameRoom ( ) - > bIsPvPRoom ( ) )
iSkillLevelDataType = CDnSkill : : PVP ;
hSkill - > SelectLevelDataType ( iSkillLevelDataType ) ;
# endif // PRE_ADD_PREFIXSKILL_PVP
if ( ! MASkillUser : : AddPreFixSystemDefenceSkill ( Index , hSkill ) )
{
SAFE_RELEASE_SPTR ( hSkill ) ;
OutputDebug ( " MASkillUser::AddPreFixSystemDeffenceSkill ===> slotIndex %d, ItemID %d, SkillID %d, SkillLevel %d AddPreFixSystem Deffence skill Failed !!! \n " ,
Index , hParts - > GetClassID ( ) , nSkillID , nSkillLevel ) ;
}
}
}
# endif // _GAMESERVER
int nLevelUpSkillID = - 1 ;
int nLevelUpSkillLevelValue = 0 ;
int nLevelUpItemSkillUsingType = 0 ;
if ( hParts - > HasLevelUpInfo ( nLevelUpSkillID , nLevelUpSkillLevelValue , nLevelUpItemSkillUsingType ) )
{
if ( CDnItem : : ItemSkillApplyType : : SkillLevelUp = = nLevelUpItemSkillUsingType )
AddSkillLevelUpInfo ( Index , nLevelUpSkillID , nLevelUpSkillLevelValue ) ;
}
return bResult ;
}
bool CDnPlayerActor : : DetachParts ( CDnParts : : PartsTypeEnum Index )
{
# if defined(_GAMESERVER)
MASkillUser : : RemovePreFixSystemDefenceSkill ( Index ) ;
# endif // _GAMESERVER
RemoveSkillLevelUpInfo ( Index ) ;
// Note: <20> <> <EFBFBD> <EFBFBD> <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
bool bResult = MAPartsBody : : DetachParts ( Index ) ;
return bResult ;
}
bool CDnPlayerActor : : AttachCashParts ( DnPartsHandle hParts , CDnParts : : PartsTypeEnum Index , bool bDelete )
{
if ( ! hParts ) return false ;
bool bResult = MAPartsBody : : AttachCashParts ( hParts , Index , bDelete ) ;
int nLevelUpSkillID = - 1 ;
int nLevelUpSkillLevelValue = 0 ;
int nLevelUpItemSkillUsingType = 0 ;
if ( hParts - > HasLevelUpInfo ( nLevelUpSkillID , nLevelUpSkillLevelValue , nLevelUpItemSkillUsingType ) )
{
if ( CDnItem : : ItemSkillApplyType : : SkillLevelUp = = nLevelUpItemSkillUsingType )
AddSkillLevelUpInfoByCashItem ( Index , nLevelUpSkillID , nLevelUpSkillLevelValue ) ;
}
return bResult ;
}
bool CDnPlayerActor : : DetachCashParts ( CDnParts : : PartsTypeEnum Index )
{
RemoveSkillLevelUpInfoByCashItem ( Index ) ;
// Note: <20> <> <EFBFBD> <EFBFBD> <20> и<EFBFBD> <D0B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
bool bResult = MAPartsBody : : DetachCashParts ( Index ) ;
return bResult ;
}
void CDnPlayerActor : : ReplacementGlyph ( DnSkillHandle hNewSkill )
{
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( ! pSox )
{
g_Log . Log ( LogType : : _FILELOG , L " GlyphSkillTable.ext failed \r \n " ) ;
return ;
}
int iSkillID = hNewSkill - > GetClassID ( ) ;
for ( int itr = 0 ; itr < CDnGlyph : : GlyphSlotEnum_Amount ; + + itr )
{
if ( m_hGlyph [ itr ] )
{
int eType = pSox - > GetFieldFromLablePtr ( m_hGlyph [ itr ] - > GetClassID ( ) , " _GlyphType " ) - > GetInteger ( ) ;
int iGlyphSkillID = pSox - > GetFieldFromLablePtr ( m_hGlyph [ itr ] - > GetClassID ( ) , " _SkillID " ) - > GetInteger ( ) ;
if ( CDnGlyph : : PassiveSkill = = eType & & iSkillID = = iGlyphSkillID )
hNewSkill - > AddGlyphStateEffect ( m_hGlyph [ itr ] - > GetClassID ( ) ) ;
}
}
}
bool CDnPlayerActor : : AttachGlyph ( DnGlyphHandle hGlyph , CDnGlyph : : GlyphSlotEnum Index , bool bDelete /* = false */ )
{
if ( ! MAPlateUser : : AttachGlyph ( hGlyph , Index , bDelete ) )
return false ;
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( ! pSox )
{
g_Log . Log ( LogType : : _FILELOG , L " GlyphSkillTable.ext failed \r \n " ) ;
return false ;
}
int eType = pSox - > GetFieldFromLablePtr ( hGlyph - > GetClassID ( ) , " _GlyphType " ) - > GetInteger ( ) ;
// <20> <> <EFBFBD> 忡 <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ųȿ<C5B3> <C8BF> <EFBFBD> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ˾<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( CDnItem : : TemperedSkill = = eType )
{
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( ! pSox )
{
g_Log . Log ( LogType : : _FILELOG , L " GlyphSkillTable.ext failed \r \n " ) ;
return false ;
}
int nSkillID = pSox - > GetFieldFromLablePtr ( hGlyph - > GetClassID ( ) , " _SkillID " ) - > GetInteger ( ) ;
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( ! hSkill ) return false ;
//CDnSkill<6C> <6C> SkillEffect<63> <74> <20> ߰<EFBFBD> <DFB0> ؾ<EFBFBD> <D8BE> <EFBFBD>
hSkill - > AddGlyphStateEffect ( hGlyph - > GetClassID ( ) ) ;
}
else if ( CDnItem : : AddSKill = = eType & & 0 ! = hGlyph - > GetSkillID ( ) & & 0 ! = hGlyph - > GetSkillLevel ( ) )
{
AddSkill ( hGlyph - > GetSkillID ( ) , hGlyph - > GetSkillLevel ( ) ) ;
DnSkillHandle hSkill = FindSkill ( hGlyph - > GetSkillID ( ) ) ;
if ( ! hSkill ) return false ;
hSkill - > AsEquipItemSkill ( ) ;
hSkill - > SetEquipIndex ( Index ) ;
m_ahEquipSkill = hSkill ;
if ( 0.0f ! = m_afLastEquipItemSkillDelayTime )
{
hSkill - > SetOnceCoolTime ( m_afLastEquipItemSkillDelayTime , m_afLastEquipItemSkillRemainTime ) ;
}
}
return true ;
}
bool CDnPlayerActor : : DetachGlyph ( CDnGlyph : : GlyphSlotEnum Index )
{
DnGlyphHandle hGlyph = m_hGlyph [ Index ] ;
if ( ! hGlyph ) return false ;
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( ! pSox )
{
g_Log . Log ( LogType : : _FILELOG , L " GlyphSkillTable.ext failed \r \n " ) ;
return false ;
}
int eType = pSox - > GetFieldFromLablePtr ( hGlyph - > GetClassID ( ) , " _GlyphType " ) - > GetInteger ( ) ;
if ( CDnItem : : TemperedSkill = = eType )
{
int nSkillID = pSox - > GetFieldFromLablePtr ( hGlyph - > GetClassID ( ) , " _SkillID " ) - > GetInteger ( ) ;
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( ! hSkill ) return false ;
hSkill - > DelGlyphStateEffect ( hGlyph - > GetClassID ( ) ) ;
}
else if ( CDnItem : : AddSKill = = eType & & 0 ! = hGlyph - > GetSkillID ( ) & & 0 ! = hGlyph - > GetSkillLevel ( ) )
{
DnSkillHandle hSkill = FindSkill ( hGlyph - > GetSkillID ( ) ) ;
m_afLastEquipItemSkillDelayTime = hSkill - > GetDelayTime ( ) ;
m_afLastEquipItemSkillRemainTime = hSkill - > GetElapsedDelayTime ( ) ;
RemoveSkill ( hGlyph - > GetSkillID ( ) ) ;
}
return true ;
}
void CDnPlayerActor : : AttachWeapon ( DnWeaponHandle hWeapon , int nEquipIndex /*= 0*/ , bool bDelete /* = false */ )
{
CDnActor : : AttachWeapon ( hWeapon , nEquipIndex , bDelete ) ;
# if defined(PRE_ADD_50907)
if ( IsSkipOnAttatchDetachWeapon ( ) = = true )
return ;
# endif // PRE_ADD_50907
RefreshWeaponViewOrder ( nEquipIndex ) ;
if ( m_hCashWeapon [ nEquipIndex ] ) {
m_hCashWeapon [ nEquipIndex ] - > RecreateCashWeapon ( GetMySmartPtr ( ) , nEquipIndex ) ;
LinkCashWeapon ( nEquipIndex ) ;
}
# if defined(_GAMESERVER)
int nSkillID = - 1 ;
int nSkillLevel = 0 ;
if ( hWeapon - > HasPrefixSkill ( nSkillID , nSkillLevel ) )
{
DnSkillHandle hSkill = CDnSkill : : CreateSkill ( GetMySmartPtr ( ) , nSkillID , nSkillLevel ) ;
if ( ! hSkill )
{
OutputDebug ( " %s ==> SkillID %d, SkillLevel %d... CreateSkill Failed!!!! \n " , __FUNCTION__ , nSkillID , nSkillLevel ) ;
}
else
{
# if defined(PRE_ADD_PREFIXSKILL_PVP)
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> pve/pvp <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
int iSkillLevelDataType = CDnSkill : : PVE ;
if ( GetGameRoom ( ) - > bIsPvPRoom ( ) )
iSkillLevelDataType = CDnSkill : : PVP ;
hSkill - > SelectLevelDataType ( iSkillLevelDataType ) ;
# endif // PRE_ADD_PREFIXSKILL_PVP
if ( ! MASkillUser : : AddPreFixSystemOffenceSkill ( nEquipIndex , hSkill ) )
{
SAFE_RELEASE_SPTR ( hSkill ) ;
OutputDebug ( " MASkillUser::AddPreFixSystemOffenceSkill ===> slotIndex %d, ItemID %d, SkillID %d, SkillLevel %d AddPreFixSystem Deffence skill Failed !!! \n " ,
nEquipIndex , hWeapon - > GetClassID ( ) , nSkillID , nSkillLevel ) ;
}
}
}
# endif // _GAMESERVER
int nLevelUpSkillID = - 1 ;
int nLevelUpSkillLevelValue = 0 ;
int nLevelUpItemSkillUsingType = 0 ;
if ( hWeapon - > HasLevelUpInfo ( nLevelUpSkillID , nLevelUpSkillLevelValue , nLevelUpItemSkillUsingType ) )
{
if ( CDnItem : : ItemSkillApplyType : : SkillLevelUp = = nLevelUpItemSkillUsingType )
AddSkillLevelUpInfo ( CDnParts : : PartsTypeEnum : : PartsTypeEnum_Amount + nEquipIndex , nLevelUpSkillID , nLevelUpSkillLevelValue ) ;
}
}
void CDnPlayerActor : : DetachWeapon ( int nEquipIndex /* = 0*/ )
{
CDnActor : : DetachWeapon ( nEquipIndex ) ;
# if defined(PRE_ADD_50907)
if ( IsSkipOnAttatchDetachWeapon ( ) = = true )
return ;
# endif // PRE_ADD_50907
RefreshWeaponViewOrder ( nEquipIndex ) ;
# if defined(_GAMESERVER)
MASkillUser : : RemovePreFixSystemOffenceSkill ( nEquipIndex ) ;
# endif // _GAMESERVER
RemoveSkillLevelUpInfo ( CDnParts : : PartsTypeEnum : : PartsTypeEnum_Amount + nEquipIndex ) ;
}
void CDnPlayerActor : : AttachCashWeapon ( DnWeaponHandle hWeapon , int nEquipIndex , bool bDelete )
{
if ( m_hCashWeapon [ nEquipIndex ] ) {
DetachCashWeapon ( nEquipIndex ) ;
}
m_hCashWeapon [ nEquipIndex ] = hWeapon ;
m_bCashSelfDeleteWeapon [ nEquipIndex ] = bDelete ;
if ( ! m_hCashWeapon [ nEquipIndex ] ) return ;
m_hCashWeapon [ nEquipIndex ] - > CreateObject ( ) ;
RefreshWeaponViewOrder ( nEquipIndex ) ;
m_hCashWeapon [ nEquipIndex ] - > RecreateCashWeapon ( GetMySmartPtr ( ) , nEquipIndex ) ;
LinkCashWeapon ( nEquipIndex ) ;
int nLevelUpSkillID = - 1 ;
int nLevelUpSkillLevelValue = 0 ;
int nLevelUpItemSkillUsingType = 0 ;
if ( hWeapon - > HasLevelUpInfo ( nLevelUpSkillID , nLevelUpSkillLevelValue , nLevelUpItemSkillUsingType ) )
{
if ( CDnItem : : ItemSkillApplyType : : SkillLevelUp = = nLevelUpItemSkillUsingType )
AddSkillLevelUpInfoByCashItem ( CASHEQUIP_WEAPON1 + nEquipIndex , nLevelUpSkillID , nLevelUpSkillLevelValue ) ;
}
}
void CDnPlayerActor : : LinkCashWeapon ( int nEquipIndex )
{
switch ( m_hCashWeapon [ nEquipIndex ] - > GetEquipType ( ) ) {
case CDnWeapon : : Sword :
case CDnWeapon : : Axe :
case CDnWeapon : : Hammer :
case CDnWeapon : : SmallBow :
case CDnWeapon : : BigBow :
case CDnWeapon : : CrossBow :
case CDnWeapon : : Staff :
case CDnWeapon : : Book :
case CDnWeapon : : Orb :
case CDnWeapon : : Puppet :
case CDnWeapon : : Mace :
case CDnWeapon : : Flail :
case CDnWeapon : : Wand :
case CDnWeapon : : Shield :
case CDnWeapon : : Gauntlet :
m_hCashWeapon [ nEquipIndex ] - > LinkWeapon ( GetMySmartPtr ( ) , nEquipIndex ) ;
break ;
case CDnWeapon : : Arrow :
m_hCashWeapon [ nEquipIndex ] - > LinkWeapon ( GetMySmartPtr ( ) , m_hCashWeapon [ 0 ] ) ;
break ;
}
}
void CDnPlayerActor : : DetachCashWeapon ( int nEquipIndex )
{
if ( ! m_hCashWeapon [ nEquipIndex ] ) return ;
m_hCashWeapon [ nEquipIndex ] - > FreeObject ( ) ;
m_hCashWeapon [ nEquipIndex ] - > UnlinkWeapon ( ) ;
if ( m_bCashSelfDeleteWeapon [ nEquipIndex ] ) {
SAFE_RELEASE_SPTR ( m_hCashWeapon [ nEquipIndex ] ) ;
m_bCashSelfDeleteWeapon [ nEquipIndex ] = false ;
}
m_hCashWeapon [ nEquipIndex ] . Identity ( ) ;
RefreshWeaponViewOrder ( nEquipIndex ) ;
RemoveSkillLevelUpInfoByCashItem ( CASHEQUIP_WEAPON1 + nEquipIndex ) ;
}
void CDnPlayerActor : : ShowCashWeapon ( int nEquipIndex , bool bShow )
{
if ( m_hCashWeapon [ nEquipIndex ] )
m_hCashWeapon [ nEquipIndex ] - > ShowWeapon ( bShow ) ;
}
void CDnPlayerActor : : SetWeaponViewOrder ( int nEquipIndex , bool bShowCash )
{
if ( nEquipIndex < 0 | | nEquipIndex > = 2 ) return ;
m_bWeaponViewOrder [ nEquipIndex ] = bShowCash ;
}
void CDnPlayerActor : : RefreshWeaponViewOrder ( int nEquipIndex )
{
if ( nEquipIndex < 0 | | nEquipIndex > = 2 ) return ;
if ( m_hWeapon [ nEquipIndex ] & & m_hCashWeapon [ nEquipIndex ] ) {
if ( m_bWeaponViewOrder [ nEquipIndex ] ) {
if ( ! m_hCashWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hCashWeapon [ nEquipIndex ] - > CreateObject ( ) ;
m_hCashWeapon [ nEquipIndex ] - > RecreateCashWeapon ( GetMySmartPtr ( ) , nEquipIndex ) ;
LinkCashWeapon ( nEquipIndex ) ;
m_hCashWeapon [ nEquipIndex ] - > ShowWeapon ( true ) ;
}
if ( m_hWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hWeapon [ nEquipIndex ] - > FreeObject ( ) ;
m_hWeapon [ nEquipIndex ] - > ShowWeapon ( false ) ;
}
}
else {
if ( ! m_hWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hWeapon [ nEquipIndex ] - > CreateObject ( ) ;
LinkWeapon ( nEquipIndex ) ;
m_hWeapon [ nEquipIndex ] - > ShowWeapon ( true ) ;
}
if ( m_hCashWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hCashWeapon [ nEquipIndex ] - > FreeObject ( ) ;
m_hCashWeapon [ nEquipIndex ] - > ShowWeapon ( false ) ;
}
}
}
else if ( m_hWeapon [ nEquipIndex ] & & ! m_hCashWeapon [ nEquipIndex ] ) {
if ( ! m_hWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hWeapon [ nEquipIndex ] - > CreateObject ( ) ;
LinkWeapon ( nEquipIndex ) ;
m_hWeapon [ nEquipIndex ] - > ShowWeapon ( true ) ;
}
}
else {
if ( nEquipIndex = = 0 ) {
if ( m_hCashWeapon [ nEquipIndex ] & & m_hCashWeapon [ nEquipIndex ] - > IsCreateObject ( ) ) {
m_hCashWeapon [ nEquipIndex ] - > FreeObject ( ) ;
m_hCashWeapon [ nEquipIndex ] - > ShowWeapon ( false ) ;
}
}
}
SetBattleMode ( IsBattleMode ( ) ) ;
}
void CDnPlayerActor : : OnEventCP ( CPTypeEnum Type , int nResult )
{
# if defined( PRE_ADD_CP_RENEWAL )
MACP_Renewal : : OnEventCP ( Type , nResult ) ;
# else // #if defined( PRE_ADD_CP_RENEWAL )
MACP : : OnEventCP ( Type , nResult ) ;
# endif // #if defined( PRE_ADD_CP_RENEWAL )
switch ( Type ) {
case MACP : : MaxComboCount :
case MACP : : KillBossCount :
case MACP : : SuperAmmorBreakScore :
case MACP : : GenocideScore :
case MACP : : AirComboScore :
case MACP : : RebirthPlayerScore :
case MACP : : ComboScore :
case MACP : : PartyComboScore :
case MACP : : AssistMonsterScore :
{
BYTE pBuffer [ 32 ] ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & Type , sizeof ( int ) , CPacketCompressStream : : INTEGER_CHAR ) ;
Stream . Write ( & nResult , sizeof ( int ) ) ;
Send ( eActor : : SC_CP , & Stream ) ;
}
break ;
}
}
void CDnPlayerActor : : UpdateAttackedCPPoint ( CDnDamageBase * pHitter , CDnWeapon : : HitTypeEnum eHitType )
{
bool bIsSameTeam = false ;
if ( pHitter & & pHitter - > GetActorHandle ( ) )
{
if ( GetTeam ( ) = = pHitter - > GetActorHandle ( ) - > GetTeam ( ) )
{
bIsSameTeam = true ;
}
}
if ( bIsSameTeam = = false )
{
switch ( eHitType )
{
case CDnWeapon : : Normal :
case CDnWeapon : : CriticalRes :
{
UpdateAttackedHit ( ) ;
}
break ;
case CDnWeapon : : Critical :
{
UpdateAttackedCriticalHit ( ) ;
}
break ;
case CDnWeapon : : Stun :
{
UpdateAttackedStunHit ( ) ;
}
break ;
}
}
}
DnWeaponHandle CDnPlayerActor : : GetActiveWeapon ( int nEquipIndex )
{
if ( m_bWeaponViewOrder [ nEquipIndex ] & & m_hCashWeapon [ nEquipIndex ] ) return m_hCashWeapon [ nEquipIndex ] ;
return CDnActor : : GetActiveWeapon ( nEquipIndex ) ;
}
float CDnPlayerActor : : PreCalcDamage ( CDnDamageBase * pHitter , SHitParam & HitParam , const float fDefenseRate , float fStateEffectAttackM )
{
float fResult = CDnActor : : PreCalcDamage ( pHitter , HitParam , fDefenseRate , fStateEffectAttackM ) ;
return fResult ;
}
bool CDnPlayerActor : : IsDie ( )
{
bool bResult = CDnPlayerState : : IsDie ( ) ;
if ( bResult ) return true ;
// PvP <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> return true <20> <> <20> ʿ䰡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> .
if ( IsGMTrace ( ) & & GetGameRoom ( ) & & ! GetGameRoom ( ) - > bIsPvPRoom ( ) )
return true ;
return false ;
}
bool CDnPlayerActor : : SetActionQueue ( const char * szActionName , int nLoopCount , float fBlendFrame , float fStartFrame , bool bCheck , bool bCheckStateEffect )
{
if ( m_bShootMode & & ! m_bTransformMode & & m_bBattleMode )
szActionName = GetChangeShootActionName ( szActionName ) ;
# if defined(PRE_FIX_63219)
//#63219
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ¿<EFBFBD> <20> ̵<EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> MAWalkMovement<6E> <74> <EFBFBD> <EFBFBD> OnStop<6F> <70> ȣ <> <C8A3> <20> ǰ<EFBFBD>
//<2F> ̶<EFBFBD> CmdStop<6F> <70> <EFBFBD> <EFBFBD> "Stand"<22> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
//Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> block <20> ߵ <EFBFBD> <20> ǰ<EFBFBD> Ư<> <C6AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD>
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Stand<6E> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> .
//<2F> ϴ<EFBFBD> Block<63> <6B> <EFBFBD> ۿ<EFBFBD> Stand<6E> <64> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( ( strstr ( m_szAction . c_str ( ) , " Block " ) ! = NULL | |
strstr ( m_szActionQueue . c_str ( ) , " Block " ) ! = NULL ) & &
strstr ( szActionName , " Stand " ) ! = NULL )
{
//#68376 <20> <> <EFBFBD> Ľ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
//Skill_StandOfFaith_EX_Block <20> ̷<EFBFBD> <20> <> <EFBFBD> ۿ<EFBFBD> <DBBF> <EFBFBD> Stand<6E> δ<EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> ...
//<2F> ٸ<EFBFBD> Block<63> <6B> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ־ "StandOfFaith"<22> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯ <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bool isSkillAction = ( strstr ( m_szAction . c_str ( ) , " StandOfFaith " ) ! = NULL | | strstr ( m_szActionQueue . c_str ( ) , " StandOfFaith " ) ) ;
if ( isSkillAction = = false )
return false ;
}
# endif // PRE_FIX_63219
return CDnActor : : SetActionQueue ( szActionName , nLoopCount , fBlendFrame , fStartFrame , bCheck , bCheckStateEffect ) ;
}
void CDnPlayerActor : : _UpdateMaxProjectileCount ( int nActionIndex , bool bUpdateReservedCount /* = false*/ )
{
if ( NULL = = m_pProjectileCountInfo )
return ;
// <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> <20> <EFBFBD> <DFBB> <EFBFBD> <20> <> <20> ִ<EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> .
m_iNowMaxProjectileCount = 0 ;
map < int , int > : : const_iterator iterProj = m_pProjectileCountInfo - > mapMaxProjectileCountInAction . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapMaxProjectileCountInAction . end ( ) ! = iterProj )
m_iNowMaxProjectileCount = iterProj - > second ;
// <20> <EFBFBD> ü <20> ñ׳ <C3B1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> ñ׳ ΰ<D7B3> <20> <> <EFBFBD> <EFBFBD> SendAction <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> <20> ʾ Ƽ <CABE> <20> Ʒ <EFBFBD> <C6B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̰<EFBFBD> <20> ǹǷ<C7B9>
// <20> <> <EFBFBD> ⼭ <20> ѹ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
m_setWeaponIDUsingProjectileSignal . clear ( ) ;
map < int , multiset < int > > : : const_iterator iterWeaponIDs = m_pProjectileCountInfo - > mapUsingProjectileWeaponTableIDs . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapUsingProjectileWeaponTableIDs . end ( ) ! = iterWeaponIDs )
m_setWeaponIDUsingProjectileSignal = iterWeaponIDs - > second ;
// <20> <> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> ñ׳ ΰ<D7B3> <20> <> <EFBFBD> <EFBFBD> SendAction <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> <20> ʾ Ƽ <CABE> <20> Ʒ <EFBFBD> <C6B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̰<EFBFBD> <20> ǹǷ<C7B9>
// <20> <> <EFBFBD> ⼭ <20> ѹ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
m_dqProjectileSignalOffset . clear ( ) ;
map < int , deque < int > > : : const_iterator iterProjOffset = m_pProjectileCountInfo - > mapProjectileSignalFrameOffset . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapProjectileSignalFrameOffset . end ( ) ! = iterProjOffset )
m_dqProjectileSignalOffset = iterProjOffset - > second ;
sort ( m_dqProjectileSignalOffset . begin ( ) , m_dqProjectileSignalOffset . end ( ) ) ;
map < int , vector < CDnActionSpecificInfo : : S_WEAPONACTION_INFO > > : : const_iterator iterWeapon = m_pProjectileCountInfo - > mapSendActionWeapon . find ( nActionIndex ) ;
if ( m_pProjectileCountInfo - > mapSendActionWeapon . end ( ) ! = iterWeapon )
{
const vector < CDnActionSpecificInfo : : S_WEAPONACTION_INFO > & vlWeaponInfo = iterWeapon - > second ;
for ( int i = 0 ; i < ( int ) vlWeaponInfo . size ( ) ; + + i )
{
const CDnActionSpecificInfo : : S_WEAPONACTION_INFO & Struct = vlWeaponInfo . at ( i ) ;
// <20> ׳ <EFBFBD> ȣ <> <C8A3> <EFBFBD> ϸ<EFBFBD> TDnPlayer~~::GetActiveWeapon() <20> Լ<EFBFBD> <D4BC> <EFBFBD> ȣ <> <C8A3> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> Ⱑ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> üũ<C3BC> <C5A9> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> CDnPlayerActor::GetActiveWeapon() <20> <> ȣ <> <C8A3> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
DnWeaponHandle hWeapon = CDnPlayerActor : : GetActiveWeapon ( Struct . iWeaponIndex ) ;
if ( hWeapon )
{
if ( false = = Struct . strActionName . empty ( ) )
{
// <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <20> <> <20> <> <20> ִ<EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( hWeapon - > IsExistAction ( Struct . strActionName . c_str ( ) ) )
{
hWeapon - > SetActionQueue ( Struct . strActionName . c_str ( ) ) ;
if ( m_ActorType < = Reserved6 )
{
int nWeaponActionIndex = hWeapon - > GetElementIndex ( Struct . strActionName . c_str ( ) ) ;
int nAddCount = hWeapon - > GetMaxProjectileCountInAction ( nWeaponActionIndex ) ;
if ( false = = bUpdateReservedCount )
m_iNowMaxProjectileCount + = nAddCount ;
else
m_iReservedProjectileCount + = nAddCount ;
// <20> <> <EFBFBD> <EFBFBD> <E2BFA1> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> .
hWeapon - > AddUsingProjectileWeaponTableIDs ( nWeaponActionIndex , m_setWeaponIDUsingProjectileSignal ) ;
// <20> <> <EFBFBD> <EFBFBD> <E2BFA1> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E2BFA1> shoot <20> <EFBFBD> <D7BC> <EFBFBD> <20> ϶<EFBFBD> <CFB6> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> <> <20> <> üũ <20> <> ƾ<EFBFBD> <C6BE> <20> ɸ<EFBFBD> <20> <> <20> ֽ<EFBFBD> <D6BD> ϴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ν <EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> ɼ<EFBFBD> <C9BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> н<EFBFBD> .
hWeapon - > AddProjectileSignalOffset ( nWeaponActionIndex , Struct . iFrame , m_dqProjectileSignalOffset ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ķ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> մϴ<D5B4> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִٰ<D6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ҷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
sort ( m_dqProjectileSignalOffset . begin ( ) , m_dqProjectileSignalOffset . end ( ) ) ;
}
}
}
}
}
}
}
bool CDnPlayerActor : : UseAndCheckAvailProjectileCount ( void )
{
if ( m_iNowMaxProjectileCount < = 0 )
{
// <20> <EFBFBD> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<EFBFBD> <C3B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> .
if ( m_iReservedProjectileCount < = 0 )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
OutputDebug ( " CS_PROJECTILE: <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> <20> <EFBFBD> ü <20> <> û. <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵܵ<C7B4> . \n " ) ;
return false ;
}
- - m_iReservedProjectileCount ;
}
if ( 0 < m_iNowMaxProjectileCount )
- - m_iNowMaxProjectileCount ;
return true ;
}
bool CDnPlayerActor : : IsExclusiveSkill ( int iSkillID , int iExclusiveID )
{
# ifndef PRE_FIX_SKILLLIST
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> id <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> true.
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( iSkill ) ;
// <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> .
if ( hSkill - > GetClassID ( ) = = iSkillID )
continue ;
if ( 0 = = hSkill - > GetExclusiveID ( ) )
continue ;
if ( iExclusiveID = = hSkill - > GetExclusiveID ( ) )
{
return true ;
}
}
# else
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> id <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> true.
DWORD dwNumSkill = GetSkillCount ( ) ;
for ( DWORD i = 0 ; i < dwNumSkill ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
// <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> .
if ( hSkill - > GetClassID ( ) = = iSkillID )
continue ;
if ( 0 = = hSkill - > GetExclusiveID ( ) )
continue ;
if ( iExclusiveID = = hSkill - > GetExclusiveID ( ) )
{
return true ;
}
}
# endif // #ifndef PRE_FIX_SKILLLIST
return false ;
}
int CDnPlayerActor : : GetAvailSkillPointByJob ( int iSkillID )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
int iJobDegree = g_pDataManager - > GetJobNumber ( GetJobClassID ( ) ) ;
int iWholeSP = GetLevelUpSkillPoint ( 1 , GetLevel ( ) ) ;
int iWholeAvailSPByJob = int ( iWholeSP * m_pSession - > GetAvailSkillPointRatioByJob ( iSkillID ) ) ;
// <20> <> ų<EFBFBD> <C5B3> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> <D8B4> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
int iUsedSPByJob = 0 ;
const TSkillData * pSkillDataForNeedJobID = g_pDataManager - > GetSkillData ( iSkillID ) ;
# ifndef PRE_FIX_SKILLLIST
for ( int i = 0 ; i < ( int ) m_vlhSkillList . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
# else
DWORD dwNumSkill = GetSkillCount ( ) ;
for ( DWORD i = 0 ; i < dwNumSkill ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
if ( hSkill - > GetNeedJobClassID ( ) = = pSkillDataForNeedJobID - > nNeedJobID )
{
int iLevel = hSkill - > GetLevel ( ) ;
for ( int k = 0 ; k < iLevel ; + + k )
{
const TSkillData * pSkillData = g_pDataManager - > GetSkillData ( hSkill - > GetClassID ( ) ) ;
iUsedSPByJob + = pSkillData - > vLevelDataList . at ( k ) . nNeedSkillPoint ;
}
}
}
// <20> <> ü <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> SP <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> SP <20> <> <20> <> ¥<EFBFBD> ̹Ƿ<CCB9> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> .
int iAvailPoint = iWholeAvailSPByJob - iUsedSPByJob ;
if ( m_pSession - > GetSkillPoint ( ) < iAvailPoint )
iAvailPoint = m_pSession - > GetSkillPoint ( ) ;
return iAvailPoint ;
}
int CDnPlayerActor : : GetUsedSkillPointInThisJob ( const int nJobID )
{
int iUsedSPByJob = 0 ;
# ifndef PRE_FIX_SKILLLIST
for ( int i = 0 ; i < ( int ) m_vlhSkillList . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
# else
DWORD dwNumSkill = GetSkillCount ( ) ;
for ( DWORD i = 0 ; i < dwNumSkill ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
if ( hSkill - > GetNeedJobClassID ( ) = = nJobID )
{
int iLevel = hSkill - > GetLevel ( ) ;
for ( int k = 0 ; k < iLevel ; + + k )
{
const TSkillData * pSkillData = g_pDataManager - > GetSkillData ( hSkill - > GetClassID ( ) ) ;
iUsedSPByJob + = pSkillData - > vLevelDataList . at ( k ) . nNeedSkillPoint ;
}
}
}
return iUsedSPByJob ;
}
void CDnPlayerActor : : OnChangePlaySpeed ( DWORD dwFrame , float fSpeed )
{
// <20> °ų<C2B0> <20> ؼ<EFBFBD> <20> <> <EFBFBD> ۾Ƹ<DBBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> þ <20> <> <EFBFBD> <EFBFBD> <20> ñ׳ <C3B1> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٿ<EFBFBD> <20> Ȱɸ<C8B0> <C9B8> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ƴ<DEBE> <C6B3> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
//for( int i = 0; i < (int)m_dqProjectileSignalOffset.size(); ++i )
//{
// int& iSignalOffsetFrame = m_dqProjectileSignalOffset.at( i );
// iSignalOffsetFrame = (int)((float)iSignalOffsetFrame * fSpeed );
//}
// <20> <> <EFBFBD> ۾Ƹӷ<C6B8> <20> ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( dwFrame < = 200 & & fSpeed < 0.05f )
m_bCheckProjectileSignalTerm = false ;
m_fFrameSpeed = fSpeed ;
}
void CDnPlayerActor : : ProcessCompanion ( LOCAL_TIME LocalTime , float fDelta )
{
CheckPetSatietyPercent ( ) ;
}
void CDnPlayerActor : : CheckPetSatietyPercent ( )
{
if ( ! IsCanPetMode ( ) )
return ;
const TVehicle * pEquipPet = GetUserSession ( ) - > GetItem ( ) - > GetPetEquip ( ) ;
if ( pEquipPet & & ( pEquipPet - > nType & Pet : : Type : : ePETTYPE_SATIETY ) & & pEquipPet - > Vehicle [ Pet : : Slot : : Body ] . nItemID > 0 )
{
if ( GetUserSession ( ) - > GetItem ( ) - > GetPetSatietyPercent ( ) < 50.f ) // <20> <> <EFBFBD> Limit üũ <20> ؾ<EFBFBD> <20> մϴ<D5B4> .
{
DnSkillHandle hFirstSkill = FindSkill ( pEquipPet - > nSkillID1 ) ;
if ( hFirstSkill & & hFirstSkill - > GetSkillType ( ) = = CDnSkill : : Passive )
{
CmdForceRemoveSkill ( pEquipPet - > nSkillID1 ) ;
m_bDeletedPetSkill [ Pet : : Skill : : Primary ] = true ;
}
DnSkillHandle hSecondSkill = FindSkill ( pEquipPet - > nSkillID2 ) ;
if ( hSecondSkill & & hSecondSkill - > GetSkillType ( ) = = CDnSkill : : Passive )
{
CmdForceRemoveSkill ( pEquipPet - > nSkillID2 ) ;
m_bDeletedPetSkill [ Pet : : Skill : : Secondary ] = true ;
}
}
else
{
if ( m_bDeletedPetSkill [ Pet : : Skill : : Primary ] = = true )
{
if ( ! IsExistSkill ( pEquipPet - > nSkillID1 ) )
CmdForceAddSkill ( pEquipPet - > nSkillID1 ) ;
m_bDeletedPetSkill [ Pet : : Skill : : Primary ] = false ;
}
if ( m_bDeletedPetSkill [ Pet : : Skill : : Secondary ] = = true )
{
if ( ! IsExistSkill ( pEquipPet - > nSkillID2 ) )
CmdForceAddSkill ( pEquipPet - > nSkillID2 ) ;
m_bDeletedPetSkill [ Pet : : Skill : : Secondary ] = false ;
}
}
}
}
CDnVehicleActor * CDnPlayerActor : : GetMyVehicleActor ( )
{
if ( m_hVehicleActor )
{
return static_cast < CDnVehicleActor * > ( m_hVehicleActor . GetPointer ( ) ) ;
}
return NULL ;
}
bool CDnPlayerActor : : IsCanVehicleMode ( )
{
if ( IsDie ( ) | | IsGhost ( ) | | m_nTeam = = PvPCommon : : Team : : Observer )
return false ;
if ( IsSpectatorMode ( ) )
return false ;
int nCurrentMapID = 0 ;
CDnGameTask * pGameTask = ( CDnGameTask * ) CTaskManager : : GetInstance ( GetRoom ( ) ) . GetTask ( " GameTask " ) ;
if ( pGameTask ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ũ<EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
nCurrentMapID = pGameTask - > GetMapTableID ( ) ;
else
nCurrentMapID = m_pSession - > GetMapIndex ( ) ;
bool bIsCanVehicleMode = g_pDataManager - > IsVehicleMode ( nCurrentMapID ) ;
# if defined( PRE_ADD_FORCE_RIDE_ENABLE_TRIGGER )
bIsCanVehicleMode = bIsCanVehicleMode & & m_bForceEnableRideByTrigger ;
# endif // #if defined( PRE_ADD_FORCE_RIDE_ENABLE_TRIGGER )
return bIsCanVehicleMode ;
}
bool CDnPlayerActor : : IsCanPetMode ( )
{
int nCurrentMapID = 0 ;
CDnGameTask * pGameTask = ( CDnGameTask * ) CTaskManager : : GetInstance ( GetRoom ( ) ) . GetTask ( " GameTask " ) ;
if ( pGameTask ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ũ<EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
nCurrentMapID = pGameTask - > GetMapTableID ( ) ;
else
nCurrentMapID = m_pSession - > GetMapIndex ( ) ;
return g_pDataManager - > IsPetMode ( nCurrentMapID ) ;
}
void CDnPlayerActor : : RideVehicle ( TVehicle * pInfo )
{
if ( ! IsPlayerActor ( ) | | IsVehicleMode ( ) | | ! pInfo )
return ;
if ( ! IsCanVehicleMode ( ) )
return ;
if ( IsBattleMode ( ) )
SetBattleMode ( false ) ;
int nVehicleActorTableID = g_pDataManager - > GetVehicleActorID ( pInfo - > Vehicle [ Vehicle : : Slot : : Body ] . nItemID ) ;
DnActorHandle hVehicle ;
hVehicle = CreateActor ( GetRoom ( ) , nVehicleActorTableID ) ;
if ( ! hVehicle | | ! hVehicle - > GetObjectHandle ( ) )
return ;
CDnVehicleActor * pVehicle = ( CDnVehicleActor * ) hVehicle . GetPointer ( ) ;
if ( ! pVehicle )
return ;
pVehicle - > SetMyPlayerActor ( GetActorHandle ( ) ) ;
pVehicle - > Show ( false ) ;
float fLandHeight = INSTANCE ( CDnWorld ) . GetHeight ( GetMatEx ( ) - > m_vPosition ) ;
pVehicle - > SetPosition ( GetMatEx ( ) - > m_vPosition ) ;
pVehicle - > SetPrevPosition ( GetMatEx ( ) - > m_vPosition ) ;
pVehicle - > SetAddHeight ( GetMatEx ( ) - > m_vPosition . y - fLandHeight ) ;
pVehicle - > GetMatEx ( ) - > CopyRotationFromThis ( GetMatEx ( ) ) ;
pVehicle - > SetItemID ( pInfo - > Vehicle [ Vehicle : : Slot : : Body ] . nItemID ) ; // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֽ<EFBFBD> <D6BD> ϴ<EFBFBD> .
# ifdef PRE_ADD_VEHICLE_ACTION_STRING
DNTableFileFormat * pVehicleTable = GetDNTable ( CDnTableDB : : TVEHICLE ) ;
std : : string strVehicleAction = pVehicleTable - > GetFieldFromLablePtr ( pInfo - > Vehicle [ Vehicle : : Slot : : Body ] . nItemID , " _RiderString " ) - > GetString ( ) ;
if ( ! strVehicleAction . empty ( ) | | strstr ( strVehicleAction . c_str ( ) , " Vehicle_ " ) ! = NULL )
pVehicle - > SetVehicleActionString ( strVehicleAction . c_str ( ) ) ;
# endif
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ݴϴ<DDB4> .
for ( int i = Vehicle : : Slot : : Saddle ; i < Vehicle : : Slot : : Max ; i + + )
{
if ( pInfo - > Vehicle [ i ] . nItemID ! = 0 & & pInfo - > Vehicle [ i ] . nSerial ! = 0 )
{
pVehicle - > EquipItem ( pInfo - > Vehicle [ i ] ) ;
}
}
////////////////
if ( pInfo - > dwPartsColor1 ! = 0 & & pInfo - > dwPartsColor1 ! = - 1 ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ°<D6B4> <C2B0> 쿡<EFBFBD> <ECBFA1> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݴϴ<DDB4> .
{
pVehicle - > ChangeHairColor ( pInfo - > dwPartsColor1 ) ; // <20> ⺻ <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> <> <EFBFBD> ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
}
SetMyVehicleActor ( pVehicle - > GetActorHandle ( ) ) ;
pVehicle - > InitializeRoom ( ( CDNGameRoom * ) GetRoom ( ) ) ;
pVehicle - > Initialize ( ) ;
pVehicle - > SetUniqueID ( m_pSession - > GetVehicleObjectID ( ) ) ;
pVehicle - > SetVehicleClassID ( pInfo - > Vehicle [ Vehicle : : Slot : : Body ] . nItemID ) ;
pVehicle - > RefreshState ( ) ;
pVehicle - > Show ( true ) ;
pVehicle - > SetAttachToPlayer ( true ) ;
pVehicle - > SetProcess ( true ) ;
SetVehicleMode ( true ) ;
pVehicle - > SetActionQueue ( " Stand " ) ;
pVehicle - > SetTeam ( GetTeam ( ) ) ;
}
void CDnPlayerActor : : UnRideVehicle ( bool bForce )
{
if ( ! IsVehicleMode ( ) )
return ;
if ( GetMyVehicleActor ( ) & & ! GetMyVehicleActor ( ) - > IsDestroy ( ) )
{
float fLandHeight = INSTANCE ( CDnWorld ) . GetHeight ( GetMyVehicleActor ( ) - > GetMatEx ( ) - > m_vPosition ) ;
SetPosition ( GetMyVehicleActor ( ) - > GetMatEx ( ) - > m_vPosition ) ;
SetPrevPosition ( GetMyVehicleActor ( ) - > GetMatEx ( ) - > m_vPosition ) ;
SetAddHeight ( GetMyVehicleActor ( ) - > GetMatEx ( ) - > m_vPosition . y - fLandHeight ) ;
GetMyVehicleActor ( ) - > SetAttachToPlayer ( false ) ;
GetMyVehicleActor ( ) - > Show ( false ) ;
GetMyVehicleActor ( ) - > SetUniqueID ( GetMyVehicleActor ( ) - > GetUniqueID ( ) + 1 ) ;
// SetDestroy<6F> <79> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> ̿<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> ԵǸ<D4B5> <20> <> <EFBFBD> <EFBFBD> ũ <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <DFBB> ȴ<EFBFBD>
// < <20> ű<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ũ<EFBFBD> <C5A9> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ°<CFB4> <C2B0> 찡 <20> <> <EFBFBD> <EFBFBD> > <20> <EFBFBD> <D7B7> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> ϱ <EFBFBD> <CFB1> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ũ<EFBFBD> <C5A9> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
GetMyVehicleActor ( ) - > SetDestroy ( ) ;
}
SetVehicleMode ( false ) ;
Show ( true ) ;
SetActionQueue ( " Stand " ) ;
return ;
}
void CDnPlayerActor : : ForceUnRideVehicle ( )
{
if ( ! IsVehicleMode ( ) )
return ;
CDNGameRoom * pRoom = GetGameRoom ( ) ;
if ( ! pRoom )
return ;
api_trigger_UnRideVehicle ( pRoom , GetSessionID ( ) ) ;
}
void CDnPlayerActor : : RemoveVehicleStateEffectImmediately ( int nBlowIndex )
{
if ( IsVehicleMode ( ) & & GetMyVehicleActor ( ) )
{
GetMyVehicleActor ( ) - > CmdRemoveStateEffectImmediately ( ( STATE_BLOW : : emBLOW_INDEX ) nBlowIndex ) ;
GetMyVehicleActor ( ) - > SendRemoveStateEffect ( ( STATE_BLOW : : emBLOW_INDEX ) nBlowIndex ) ;
}
}
void CDnPlayerActor : : SetForceEnableRide ( const bool bForceEnableRide )
{
if ( false = = bForceEnableRide )
ForceUnRideVehicle ( ) ;
m_bForceEnableRideByTrigger = bForceEnableRide ;
m_pSession - > SendTriggerForceEnableRide ( GetSessionID ( ) , bForceEnableRide ) ;
}
void CDnPlayerActor : : OnCannonMonsterDie ( void )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
EndCannonMode ( ) ;
SetActionQueue ( " Stand " ) ;
}
void CDnPlayerActor : : EndCannonMode ( )
{
m_bPlayerCannonMode = false ;
m_hCannonMonsterActor . Identity ( ) ;
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TACTOR ) ;
if ( pSox & & pSox - > IsExistItem ( GetClassID ( ) ) )
{
float fWeight = pSox - > GetFieldFromLablePtr ( GetClassID ( ) , " _Weight " ) - > GetFloat ( ) ;
int fPressLevel = pSox - > GetFieldFromLablePtr ( GetClassID ( ) , " _PressLevel " ) - > GetInteger ( ) ;
SetWeight ( fWeight ) ;
SetPressLevel ( fPressLevel ) ;
}
}
void CDnPlayerActor : : ProcessNonLocalShootModeAction ( )
{
if ( ! IsLocalActor ( ) )
return ;
if ( strcmp ( GetCurrentAction ( ) , " MOD_Stand " ) = = NULL ) {
if ( strstr ( m_szCustomAction . c_str ( ) , " MOD_Shoot " ) ) {
float fFrame = ( ( CDnActionBase : : m_LocalTime - m_CustomActionTime ) / 1000.f ) * CDnActionBase : : m_fFPS ;
CmdStop ( " MOD_Shoot_Stand " , 0 , 8.f , fFrame ) ;
ResetCustomAction ( ) ;
}
}
}
const char * CDnPlayerActor : : GetChangeShootActionName ( const char * szActionName ) // <20> ۾<EFBFBD> <DBBE> <EFBFBD> .
{
if ( strcmp ( szActionName , " Stand " ) = = NULL )
{
szActionName = " MOD_Stand " ;
}
if ( strcmp ( szActionName , " Move_Front " ) = = NULL )
{
szActionName = " MOD_Move_Front " ;
}
if ( strcmp ( szActionName , " Move_Back " ) = = NULL )
{
szActionName = " MOD_Move_Back " ;
}
if ( strcmp ( szActionName , " Move_Left " ) = = NULL )
{
szActionName = " MOD_Move_Left " ;
}
if ( strcmp ( szActionName , " Move_Right " ) = = NULL )
{
szActionName = " MOD_Move_Right " ;
}
if ( strcmp ( szActionName , " Jump " ) = = NULL )
{
szActionName = " MOD_Jump " ;
}
if ( strstr ( szActionName , " Attack1 " ) )
{
szActionName = " MOD_Shoot_Stand " ;
}
return szActionName ;
}
bool CDnPlayerActor : : IsTransformSkill ( int nSkillID )
{
for ( DWORD i = 0 ; i < m_vecTransformSkillList . size ( ) ; i + + )
{
if ( m_vecTransformSkillList [ i ] = = nSkillID )
return true ;
}
return false ;
}
void CDnPlayerActor : : RefreshTransformMode ( )
{
m_bRefreshTransformMode = false ;
DNTableFileFormat * pMonsterSox = GetDNTable ( CDnTableDB : : TMONSTER_TRANS ) ;
DNTableFileFormat * pMonsterSkillSox = GetDNTable ( CDnTableDB : : TMONSTERSKILL_TRANS ) ;
if ( ! pMonsterSox | | ! pMonsterSkillSox ) return ;
if ( IsDestroy ( ) ) return ;
if ( IsProcessSkill ( ) = = true )
{
bool bCancelSkill = true ;
if ( GetStateBlow ( ) - > IsApplied ( STATE_BLOW : : BLOW_232 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_232 , vlBlows ) ;
for ( DWORD i = 0 ; i < vlBlows . size ( ) ; i + + )
{
if ( vlBlows [ i ] )
{
CDnTransformBlow * pTransformBlow = static_cast < CDnTransformBlow * > ( vlBlows [ i ] . GetPointer ( ) ) ;
if ( pTransformBlow & & pTransformBlow - > GetParentSkillInfo ( ) - > iSkillID = = m_hProcessSkill - > GetClassID ( ) )
{
bCancelSkill = false ;
break ;
}
}
}
}
if ( bCancelSkill = = true )
{
CancelUsingSkill ( ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
}
}
else
{
SetAction ( " Stand " , 0.f , 0.f ) ;
}
if ( IsTransformMode ( ) = = true )
{
int nActorIndex = pMonsterSox - > IsExistItem ( m_nMonsterMutationTableID ) ? pMonsterSox - > GetFieldFromLablePtr ( m_nMonsterMutationTableID , " _ActorTableID " ) - > GetInteger ( ) : 0 ;
int nSkillTableIndex = pMonsterSox - > IsExistItem ( m_nMonsterMutationTableID ) ? pMonsterSox - > GetFieldFromLablePtr ( m_nMonsterMutationTableID , " _SkillTable " ) - > GetInteger ( ) : 0 ;
if ( GetStateBlow ( ) - > IsApplied ( STATE_BLOW : : BLOW_176 ) )
{
CmdRemoveStateEffect ( STATE_BLOW : : BLOW_176 ) ;
GetStateBlow ( ) - > Process ( 0 , 0.f ) ;
}
DNTableFileFormat * pActorSox = GetDNTable ( CDnTableDB : : TACTOR ) ;
if ( ! pActorSox | | ! pActorSox - > IsExistItem ( nActorIndex ) )
return ;
if ( nActorIndex > 0 )
{
SwapSingleSkin ( nActorIndex ) ;
ResetCustomAction ( ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
}
else
return ;
if ( pMonsterSkillSox & & pMonsterSkillSox - > IsExistItem ( nSkillTableIndex ) )
{
if ( ! m_vecTransformSkillList . empty ( ) ) // <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> . < <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ ٰ<DFB4> <20> Ǻ<EFBFBD> <C7BA> <EFBFBD> <EFBFBD> ϴ°<CFB4> <C2B0> <EFBFBD> >
{
for ( int i = 0 ; i < ( int ) m_vecTransformSkillList . size ( ) ; i + + )
{
if ( m_vecTransformSkillList [ i ] ! = - 1 )
RemoveSkill ( m_vecTransformSkillList [ i ] ) ;
}
m_vecTransformSkillList . clear ( ) ;
}
for ( int i = 0 ; i < PvPCommon : : Common : : MonsterMutationSkillColCount ; i + + )
{
char szStr [ 256 ] ;
int nSkillIndex = - 1 ;
int nSkillLevel = - 1 ;
sprintf_s ( szStr , " _SkillIndex%d " , i + 1 ) ;
nSkillIndex = pMonsterSkillSox - > GetFieldFromLablePtr ( nSkillTableIndex , szStr ) - > GetInteger ( ) ;
sprintf_s ( szStr , " _SkillLevel%d " , i + 1 ) ;
nSkillLevel = pMonsterSkillSox - > GetFieldFromLablePtr ( nSkillTableIndex , szStr ) - > GetInteger ( ) ;
if ( nSkillIndex ! = - 1 & & nSkillLevel ! = - 1 )
{
m_vecTransformSkillList . push_back ( nSkillIndex ) ;
AddSkill ( nSkillIndex , nSkillLevel ) ;
}
else
break ;
}
std : : string strSkillVec = " " ;
for ( DWORD i = 0 ; i < m_vecTransformSkillList . size ( ) ; i + + )
{
char szSkillIndex [ 256 ] ;
sprintf ( szSkillIndex , " %d; " , m_vecTransformSkillList [ i ] ) ;
strSkillVec + = szSkillIndex ;
}
m_nAllowedSkill = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_176 , - 1 , strSkillVec . c_str ( ) , true ) ; // <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ȱ<EFBFBD> <C8B0> ȭ <20> Ѵ <EFBFBD> .
}
}
else if ( IsTransformMode ( ) = = false )
{
SwapSingleSkin ( - 1 ) ;
SetActionQueue ( IsDie ( ) ? " Die " : m_strTransformEndAction . c_str ( ) ) ;
for ( UINT i = 0 ; i < m_vecTransformSkillList . size ( ) ; i + + )
{
if ( m_vecTransformSkillList [ i ] ! = - 1 )
RemoveSkill ( m_vecTransformSkillList [ i ] ) ;
}
if ( m_nAllowedSkill > 0 )
{
CmdRemoveStateEffectFromID ( m_nAllowedSkill ) ;
m_nAllowedSkill = 0 ;
}
m_vecTransformSkillList . clear ( ) ;
}
SetBattleMode ( true ) ;
RefreshState ( ) ;
}
void CDnPlayerActor : : ToggleTransformMode ( bool bTrue , int nMonsterMutatorTableID , bool bForce , const char * strEndAction )
{
if ( m_bTransformMode = = bTrue & & ! bForce )
return ;
m_bTransformMode = bTrue ;
m_nMonsterMutationTableID = nMonsterMutatorTableID ;
m_bRefreshTransformMode = true ;
m_strTransformEndAction = strEndAction ;
}
void CDnPlayerActor : : CmdShootMode ( bool bTrue )
{
m_bShootMode = bTrue ;
if ( m_bShootMode )
CmdStop ( " MOD_Shoot_Stand " ) ;
else
CmdStop ( " Stand " ) ;
BYTE pBuffer [ 128 ] ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
DWORD dwUniqueID = GetUniqueID ( ) ;
Stream . Write ( & dwUniqueID , sizeof ( dwUniqueID ) ) ;
Stream . Write ( & m_bShootMode , sizeof ( bool ) ) ;
Send ( eActor : : SC_CMDSHOOTMODE , & Stream ) ;
}
void CDnPlayerActor : : CmdWarp ( EtVector3 & vPos , EtVector2 & vLook , CDNUserSession * pGameSession , bool bCheckPlayerFollowSummonedMonster /*=false*/ )
{
if ( IsVehicleMode ( ) & & GetMyVehicleActor ( ) )
GetMyVehicleActor ( ) - > CmdWarp ( vPos , vLook , pGameSession ) ;
CDnActor : : CmdWarp ( vPos , vLook , pGameSession , bCheckPlayerFollowSummonedMonster ) ;
if ( m_pPlayerSpeedHackChecker ) m_pPlayerSpeedHackChecker - > ResetInvalid ( ) ;
// #32426 <20> <> ȯü <20> <> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> Ȥ<> <C8A4> <20> <> <20> ̵<EFBFBD> (CmdWarp)<29> <> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD>
// <20> <> <20> ÷<EFBFBD> <C3B7> ̾ <20> <> ȯ<EFBFBD> <C8AF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> üũ<C3BC> ؼ<EFBFBD> ó<> <C3B3> .
if ( bCheckPlayerFollowSummonedMonster )
{
list < S_FOLLOWSTAGE_SUMMONED_MONSTER_INFO > : : iterator iter = m_listSummonedMonstersFollowStageInfos . begin ( ) ;
for ( iter ; iter ! = m_listSummonedMonstersFollowStageInfos . end ( ) ; )
{
DnMonsterActorHandle hMonsterActor = iter - > hMonster ;
if ( hMonsterActor & & false = = hMonsterActor - > IsDie ( ) )
{
hMonsterActor - > CmdWarp ( vPos , vLook , pGameSession , false ) ;
hMonsterActor - > ResetAggro ( ) ;
hMonsterActor - > CmdAction ( " Stand " ) ;
+ + iter ;
}
else
{
iter = m_listSummonedMonstersFollowStageInfos . erase ( iter ) ;
}
}
}
}
void CDnPlayerActor : : RequestCooltimeParrySuccess ( int iSkillID )
{
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & iSkillID , sizeof ( int ) ) ;
Send ( eActor : : CS_COOLTIMEPARRY_SUCCESS , & Stream ) ;
}
bool CDnPlayerActor : : IsInvalidPlayerChecker ( )
{
if ( ! m_pSession ) return false ;
if ( m_pSession - > GetHackPlayRestraintValue ( ) < = 0 ) return false ;
if ( m_pSession - > GetHackAbuseDBValue ( ) + m_nInvalidPlayerCheckCounter > = m_pSession - > GetHackPlayRestraintValue ( ) ) return true ;
return false ;
}
void CDnPlayerActor : : SwapSingleSkin ( int nChangeActorTableID )
{
if ( m_nSwapSingleSkinActorID = = nChangeActorTableID ) return ;
m_nSwapSingleSkinActorID = nChangeActorTableID ;
// FreeAction();
# ifdef PRE_FIX_MEMOPT_EXT
if ( g_pDataManager = = NULL )
{
_ASSERT ( 0 ) ;
return ;
}
# endif
DNTableFileFormat * pSox = GetDNTable ( CDnTableDB : : TACTOR ) ;
if ( m_nSwapSingleSkinActorID = = - 1 ) {
# ifdef PRE_FIX_MEMOPT_EXT
std : : string szSkinName , szAniName , szActName ;
g_pDataManager - > GetFileNameFromFileEXT ( szSkinName , pSox , m_nClassID , " _SkinName " ) ;
g_pDataManager - > GetFileNameFromFileEXT ( szAniName , pSox , m_nClassID , " _AniName " ) ;
g_pDataManager - > GetFileNameFromFileEXT ( szActName , pSox , m_nClassID , " _ActName " ) ;
# else
std : : string szSkinName = pSox - > GetFieldFromLablePtr ( m_nClassID , " _SkinName " ) - > GetString ( ) ;
std : : string szAniName = pSox - > GetFieldFromLablePtr ( m_nClassID , " _AniName " ) - > GetString ( ) ;
std : : string szActName = pSox - > GetFieldFromLablePtr ( m_nClassID , " _ActName " ) - > GetString ( ) ;
# endif
SAFE_RELEASE_SPTR ( GetObjectHandle ( ) ) ;
FreeAction ( ) ;
LoadSkin ( CEtResourceMng : : GetInstance ( ) . GetFullName ( szSkinName ) . c_str ( ) , CEtResourceMng : : GetInstance ( ) . GetFullName ( szAniName ) . c_str ( ) ) ;
LoadAction ( CEtResourceMng : : GetInstance ( ) . GetFullName ( szActName ) . c_str ( ) ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
for ( int i = 0 ; i < CDnWeapon : : EquipSlot_Amount ; i + + )
{
DnWeaponHandle hWeapon = GetWeapon ( i ) ;
if ( hWeapon )
{
LinkWeapon ( i ) ;
}
hWeapon = GetCashWeapon ( i ) ;
if ( hWeapon )
{
LinkCashWeapon ( i ) ;
}
}
SAFE_RELEASE_SPTR ( m_hSwapOriginalHandle ) ;
SAFE_DELETE ( m_pSwapOriginalAction ) ;
}
else
{
# ifdef PRE_FIX_MEMOPT_EXT
std : : string szSkinName , szAniName , szActName ;
g_pDataManager - > GetFileNameFromFileEXT ( szSkinName , pSox , m_nSwapSingleSkinActorID , " _SkinName " ) ;
g_pDataManager - > GetFileNameFromFileEXT ( szAniName , pSox , m_nSwapSingleSkinActorID , " _AniName " ) ;
g_pDataManager - > GetFileNameFromFileEXT ( szActName , pSox , m_nSwapSingleSkinActorID , " _ActName " ) ;
# else
std : : string szSkinName = pSox - > GetFieldFromLablePtr ( m_nSwapSingleSkinActorID , " _SkinName " ) - > GetString ( ) ;
std : : string szAniName = pSox - > GetFieldFromLablePtr ( m_nSwapSingleSkinActorID , " _AniName " ) - > GetString ( ) ;
std : : string szActName = pSox - > GetFieldFromLablePtr ( m_nSwapSingleSkinActorID , " _ActName " ) - > GetString ( ) ;
# endif
if ( ! m_hSwapOriginalHandle & & m_hObject )
{
m_hSwapOriginalHandle = EternityEngine : : CreateAniObject ( GetRoom ( ) , CEtResourceMng : : GetInstance ( ) . GetFullName ( m_hObject - > GetSkinFileName ( ) ) . c_str ( ) , CEtResourceMng : : GetInstance ( ) . GetFullName ( m_hObject - > GetAniHandle ( ) - > GetFileName ( ) ) . c_str ( ) ) ;
}
SAFE_RELEASE_SPTR ( GetObjectHandle ( ) ) ;
if ( ! m_pSwapOriginalAction )
{
m_pSwapOriginalAction = new CDnActionBase ;
m_pSwapOriginalAction - > LoadAction ( CEtResourceMng : : GetInstance ( ) . GetFullName ( CDnActionBase : : m_szFileName ) . c_str ( ) ) ;
}
SAFE_RELEASE_SPTR ( GetObjectHandle ( ) ) ;
FreeAction ( ) ;
LoadSkin ( CEtResourceMng : : GetInstance ( ) . GetFullName ( szSkinName ) . c_str ( ) , CEtResourceMng : : GetInstance ( ) . GetFullName ( szAniName ) . c_str ( ) ) ;
LoadAction ( CEtResourceMng : : GetInstance ( ) . GetFullName ( szActName ) . c_str ( ) ) ;
SetAction ( " Stand " , 0.f , 0.f ) ;
}
if ( m_hObject )
{
m_hObject - > SetCollisionGroup ( COLLISION_GROUP_DYNAMIC ( 1 ) ) ;
m_hObject - > SetTargetCollisionGroup ( COLLISION_GROUP_STATIC ( 1 ) | COLLISION_GROUP_DYNAMIC ( 2 ) | COLLISION_GROUP_DYNAMIC ( 3 ) ) ;
}
if ( m_pBubbleSystem )
m_pBubbleSystem - > Clear ( ) ;
}
void CDnPlayerActor : : InitializeEnchantPassiveSkills ( void )
{
// <20> <> ȭ <20> нú<D0BD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
DnSkillHandle hSkill = m_vlhSkillList [ i ] ;
# else
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
if ( CDnSkill : : EnchantPassive = = hSkill - > GetSkillType ( ) & &
0 < hSkill - > GetBaseSkillID ( ) )
{
DnSkillHandle hEnchantPassiveSkill = hSkill ;
int iBaseSkillID = hEnchantPassiveSkill - > GetBaseSkillID ( ) ;
DnSkillHandle hBaseSkill = FindSkill ( iBaseSkillID ) ;
// <20> ӽ÷<D3BD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ö<C3B6> <20> <> <EFBFBD> ־<EFBFBD> <20> <> .
if ( hBaseSkill )
hBaseSkill - > ApplyEnchantSkill ( hEnchantPassiveSkill ) ;
}
}
}
void CDnPlayerActor : : OnReplacementSkill ( DnSkillHandle hLegacySkill , DnSkillHandle hNewSkill )
{
MASkillUser : : OnReplacementSkill ( hLegacySkill , hNewSkill ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> нú<D0BD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> ü <20> <> ƾ<EFBFBD> <C6BE> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ <20> <> <EFBFBD> ¸ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų<EFBFBD> <C5B2> .
if ( CDnSkill : : EnchantPassive = = hLegacySkill - > GetSkillType ( ) & &
0 < hLegacySkill - > GetBaseSkillID ( ) )
{
DnSkillHandle hBaseSkill = FindSkill ( hLegacySkill - > GetBaseSkillID ( ) ) ;
if ( hBaseSkill )
{
_ASSERT ( hLegacySkill - > GetBaseSkillID ( ) = = hNewSkill - > GetBaseSkillID ( ) ) ;
hBaseSkill - > ReleaseEnchantSkill ( ) ;
hBaseSkill - > ApplyEnchantSkill ( hNewSkill ) ;
}
}
else
{
// <20> <> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> нú<D0BD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> ü <20> <> ƾ<EFBFBD> <C6BE> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> SkillTask <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ƾ<EFBFBD> <C6BE> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> ΰ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ָ<EFBFBD> <20> ȴ<EFBFBD> .
CheckAndApplyEnchantPassiveSkill ( hNewSkill ) ;
}
}
void CDnPlayerActor : : CheckAndApplyEnchantPassiveSkill ( DnSkillHandle hBaseSkill )
{
if ( hBaseSkill )
{
DnSkillHandle hEnchantPassiveSkill ;
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
DnSkillHandle hSkill = m_vlhSkillList [ i ] ;
# else
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
if ( hSkill - > GetBaseSkillID ( ) = = hBaseSkill - > GetClassID ( ) )
{
hEnchantPassiveSkill = hSkill ;
break ;
}
}
if ( hEnchantPassiveSkill )
hBaseSkill - > ApplyEnchantSkill ( hEnchantPassiveSkill ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ż<EFBFBD> ε<EFBFBD> <CEB5> <EFBFBD> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǿ<EFBFBD> <C7BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 2<> <32> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <CDB8> <EFBFBD> <20> ɰ<EFBFBD> <20> ִµ<D6B4>
// <20> <> <20> ߿<EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> hit <20> DZ<EFBFBD> <20> <> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <CDB8> <EFBFBD> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> . #28747
void CDnPlayerActor : : OnHitSignalStateEffectFilterException ( DWORD dwTargetActorUniqueID , int iBlowIndex )
{
if ( STATE_BLOW : : BLOW_041 = = ( STATE_BLOW : : emBLOW_INDEX ) iBlowIndex | |
STATE_BLOW : : BLOW_144 = = ( STATE_BLOW : : emBLOW_INDEX ) iBlowIndex )
{
m_mapIcyFractionHitted [ dwTargetActorUniqueID ] = true ;
}
}
bool CDnPlayerActor : : CheckHitSignalStateEffectFilterException ( DWORD dwTargetActorUniqueID , int iBlowIndex )
{
bool bResult = true ;
if ( STATE_BLOW : : BLOW_041 = = ( STATE_BLOW : : emBLOW_INDEX ) iBlowIndex | |
STATE_BLOW : : BLOW_144 = = ( STATE_BLOW : : emBLOW_INDEX ) iBlowIndex )
{
if ( m_mapIcyFractionHitted . end ( ) ! = m_mapIcyFractionHitted . find ( dwTargetActorUniqueID ) )
{
bResult = false ;
}
}
return bResult ;
}
bool CDnPlayerActor : : IsMyRelicMonster ( DnActorHandle hActor )
{
bool bResult = false ;
if ( hActor & & hActor - > IsMonsterActor ( ) )
{
CDnMonsterActor * pMonsterActor = static_cast < CDnMonsterActor * > ( hActor . GetPointer ( ) ) ;
if ( pMonsterActor - > IsClericRelicMonster ( ) )
{
if ( GetMySmartPtr ( ) = = pMonsterActor - > GetSummonerPlayerActor ( ) )
bResult = true ;
}
}
return bResult ;
}
INT64 CDnPlayerActor : : GetCharacterDBID ( )
{
return m_pSession ? m_pSession - > GetCharacterDBID ( ) : 0 ;
}
// #26902
// <20> ӽ÷<D3BD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ұ<EFBFBD> <D2B0> ϴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> <EFBFBD> ½<EFBFBD> Ų<EFBFBD> <C5B2> .
bool CDnPlayerActor : : CanChangeJob ( int iJobID )
{
// <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 2<> <32> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
DNTableFileFormat * pJobTable = GetDNTable ( CDnTableDB : : TJOB ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܰ谪<DCB0> <E8B0AA> <20> <> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
int iNowJob = m_pSession - > GetUserJob ( ) ;
int iNowJobDeep = 0 ;
int iNowRootJob = 0 ;
for ( int i = 0 ; i < pJobTable - > GetItemCount ( ) ; + + i )
{
int iItemID = pJobTable - > GetItemID ( i ) ;
if ( iItemID = = iNowJob )
{
iNowJobDeep = pJobTable - > GetFieldFromLablePtr ( iItemID , " _JobNumber " ) - > GetInteger ( ) ;
iNowRootJob = pJobTable - > GetFieldFromLablePtr ( iItemID , " _BaseClass " ) - > GetInteger ( ) ;
break ;
}
}
int iJobIDToChange = iJobID ;
// <20> ٲٱ<D9B2> <20> <> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܰ谡 <20> <> <EFBFBD> ų<EFBFBD> ū<> <C5AB> Ȯ<> <C8AE> .
bool bResult = false ;
map < int , int > mapRootJob ;
for ( int i = 0 ; i < pJobTable - > GetItemCount ( ) ; + + i )
{
int iItemID = pJobTable - > GetItemID ( i ) ;
if ( iItemID = = iJobIDToChange )
{
int iJobRootToChange = pJobTable - > GetFieldFromLablePtr ( iItemID , " _BaseClass " ) - > GetInteger ( ) ;
if ( iNowRootJob = = iJobRootToChange )
{
int iJobDeepToChange = pJobTable - > GetFieldFromLablePtr ( iItemID , " _JobNumber " ) - > GetInteger ( ) ;
if ( iNowJobDeep < iJobDeepToChange )
{
// <20> θ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ¾ƾ<C2BE> <20> <> .
int iParentJobID = pJobTable - > GetFieldFromLablePtr ( iItemID , " _ParentJob " ) - > GetInteger ( ) ;
if ( iParentJobID = = iNowJob )
{
bResult = true ;
}
else
{
// <20> ٲٰ<D9B2> <D9B0> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> θ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD> .
wstring wszString = FormatW ( L " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Դϴ<D4B4> .!!\r \n " ) ;
m_pSession - > SendChat ( CHATTYPE_NORMAL , ( int ) wszString . size ( ) * sizeof ( WCHAR ) , L " " , ( WCHAR * ) wszString . c_str ( ) ) ;
}
}
else
{
// <20> ٲٰ<D9B2> <D9B0> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> ܰ<EFBFBD> <DCB0> <EFBFBD> . <20> <> <EFBFBD> ٲ<EFBFBD> .
wstring wszString = FormatW ( L " <EFBFBD> <EFBFBD> <EFBFBD> ų<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ܰ<EFBFBD> <DCB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> !!\r \n " ) ;
m_pSession - > SendChat ( CHATTYPE_NORMAL , ( int ) wszString . size ( ) * sizeof ( WCHAR ) , L " " , ( WCHAR * ) wszString . c_str ( ) ) ;
}
}
else
{
// <20> ٲٰ<D9B2> <D9B0> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> ٲ<EFBFBD> .
wstring wszString = FormatW ( L " <EFBFBD> ٸ<EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> !!\r \n " ) ;
m_pSession - > SendChat ( CHATTYPE_NORMAL , ( int ) wszString . size ( ) * sizeof ( WCHAR ) , L " " , ( WCHAR * ) wszString . c_str ( ) ) ;
}
}
}
if ( false = = bResult )
{
wstring wszString = FormatW ( L " <EFBFBD> ߸<EFBFBD> <EFBFBD> <EFBFBD> Job ID <20> Դϴ<D4B4> ..\r \n " ) ;
m_pSession - > SendChat ( CHATTYPE_NORMAL , ( int ) wszString . size ( ) * sizeof ( WCHAR ) , L " " , ( WCHAR * ) wszString . c_str ( ) ) ;
}
return bResult ;
}
void CDnPlayerActor : : SendTempJobChange ( int iJobID )
{
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & iJobID , sizeof ( int ) ) ;
Send ( eActor : : SC_DO_TEMP_JOBCHANGE , & Stream ) ;
m_iTempChangedJob = iJobID ;
}
// <20> ӽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> .
void CDnPlayerActor : : EndAddTempSkillAndSendRestoreTempJobChange ( void )
{
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & m_iTempChangedJob , sizeof ( int ) ) ;
Send ( eActor : : SC_RESTORE_TEMP_JOBCHANGE , & Stream ) ;
m_iTempChangedJob = 0 ;
}
void CDnPlayerActor : : AddTempSkill ( int iSkillID )
{
// <20> ӽ÷<D3BD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ̽<EFBFBD> <CCBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ߰<EFBFBD> <DFB0> Ѵ <EFBFBD> .
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
int iNeedBaseSkillID = 0 ;
if ( pSkillTable - > IsExistItem ( iSkillID ) )
iNeedBaseSkillID = pSkillTable - > GetFieldFromLablePtr ( iSkillID , " _BaseSkillID " ) - > GetInteger ( ) ;
DNVector ( int ) vlSkillsToAdd ;
if ( 0 < iNeedBaseSkillID )
{
// <20> <> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <20> ̰͵<CCB0> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> Ϳ <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
if ( false = = IsExistSkill ( iNeedBaseSkillID ) )
vlSkillsToAdd . push_back ( iNeedBaseSkillID ) ;
}
vlSkillsToAdd . push_back ( iSkillID ) ;
for ( int i = 0 ; i < ( int ) vlSkillsToAdd . size ( ) ; + + i )
{
int iSkillIDToAdd = vlSkillsToAdd . at ( i ) ;
bool bSuccess = AddSkill ( iSkillIDToAdd , 1 , CDnSkill : : PVE ) ;
if ( bSuccess )
{
DnSkillHandle hSkill = FindSkill ( iSkillIDToAdd ) ;
if ( hSkill )
{
hSkill - > AsTempSkill ( ) ;
// 2<> <32> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> ,
// <20> <> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> °<EFBFBD> <20> <> ü <20> <> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> ش<EFBFBD> .
if ( GetLevel ( ) < hSkill - > GetLevelLimit ( ) )
hSkill - > SetLevelLimit ( GetLevel ( ) ) ;
if ( false = = IsPassJob ( hSkill - > GetNeedJobClassID ( ) ) )
hSkill - > SetNeedJobClassID ( GetJobClassID ( ) ) ;
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <20> <> ų <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & iSkillID , sizeof ( int ) ) ;
Send ( eActor : : SC_ADD_TEMP_SKILL , & Stream ) ;
m_bTempSkillAdded = true ;
}
}
}
}
void CDnPlayerActor : : RemoveAllTempSkill ( void )
{
# ifndef PRE_FIX_SKILLLIST
DNVector ( DnSkillHandle ) : : iterator iter = m_vlhSkillList . begin ( ) ;
for ( iter ; iter ! = m_vlhSkillList . end ( ) ; )
{
DnSkillHandle hSkill = * iter ;
if ( hSkill - > IsTempSkill ( ) )
{
// 2<> <32> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <D3BD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9> MASkillUser <20> <> <20> ƴ<EFBFBD> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD>
// <20> <> ų <20> <> ü <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> ʰ<EFBFBD> <CAB0> <EFBFBD> <20> ߰<EFBFBD> <20> <> û<EFBFBD> <C3BB> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// MASkillUser::RemoveSkill() <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <D8BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
int iSkillID = hSkill - > GetClassID ( ) ;
OnRemoveSkill ( hSkill ) ;
iter = m_vlhSkillList . erase ( iter ) ;
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & iSkillID , sizeof ( int ) ) ;
Send ( eActor : : SC_REMOVE_TEMP_SKILL , & Stream ) ;
}
else
+ + iter ;
}
# else
vector < int > vlTempSkills ;
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
DnSkillHandle hSkill = GetSkillFromIndex ( i ) ;
if ( hSkill - > IsTempSkill ( ) )
{
vlTempSkills . push_back ( hSkill - > GetClassID ( ) ) ;
}
}
for ( int i = 0 ; i < ( int ) vlTempSkills . size ( ) ; + + i )
{
int iSkillID = vlTempSkills . at ( i ) ;
RemoveSkill ( iSkillID ) ;
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ӽ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
BYTE pBuffer [ 32 ] = { 0 } ;
CPacketCompressStream Stream ( pBuffer , 32 ) ;
Stream . Write ( & iSkillID , sizeof ( int ) ) ;
Send ( eActor : : SC_REMOVE_TEMP_SKILL , & Stream ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
m_bTempSkillAdded = false ;
}
# ifdef PRE_ADD_48714
# include "DNMailSender.h"
# endif //#ifdef PRE_ADD_48714
void CDnPlayerActor : : OnInvalidPlayerChecker ( int nValue )
{
m_nInvalidPlayerCheckCounter + = nValue ;
OutputDebug ( " OnInvalidPlayerChecker : %d, (%d) \n " , m_nInvalidPlayerCheckCounter , nValue ) ;
if ( m_pSession & & m_pSession - > GetHackPlayRestraintValue ( ) > 0 )
{
# if defined (PRE_ADD_ABUSE_ACCOUNT_RESTRAINT)
//<2F> <> <EFBFBD> 簡 <20> <> <EFBFBD> <EFBFBD> <EEB0A5> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǵܿ<C7B4> *2 <20> <> <EFBFBD> <EFBFBD>
if ( m_nInvalidPlayerCheckCounter > = m_pSession - > GetHackPlayRestraintValue ( ) )
{
//<2F> ϴ<EFBFBD> <CFB4> <EFBFBD> <20> ѱ<EFBFBD> <D1B1> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD>
if ( m_pSession - > GetHackCharacterCntWithoutMe ( ) > 0 )
{
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> ϳ <EFBFBD> <20> ִµ<D6B4> <20> ϳ <EFBFBD> <20> <> <20> ɷȴ<C9B7> 36080<38> ̽<EFBFBD> <CCBD> <EFBFBD> <20> <> <EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<EFBFBD> <C3B3> <EFBFBD> Ѵ <EFBFBD> .
# if defined(PRE_ADD_MULTILANGUAGE)
std : : wstring wszRestraintReason = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 100070 , m_pSession - > m_eSelectedLanguage ) ;
std : : wstring wszRestraintReasonForDolis = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 100071 , m_pSession - > m_eSelectedLanguage ) ;
# else //#if defined(PRE_ADD_MULTILANGUAGE)
std : : wstring wszRestraintReason = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 100070 ) ;
std : : wstring wszRestraintReasonForDolis = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 100071 ) ;
# endif //#if defined(PRE_ADD_MULTILANGUAGE)
m_pSession - > GetDBConnection ( ) - > QueryAddRestraint ( m_pSession , DBDNWorldDef : : RestraintTargetCode : : Account , DBDNWorldDef : : RestraintTypeCode : : ConnectRestraint , wszRestraintReason . c_str ( ) , wszRestraintReasonForDolis . c_str ( ) , 9999 , DBDNWorldDef : : RestraintDolisReasonCode : : AbuseRestraintCode ) ;
}
m_pSession - > DetachConnection ( L " InvalidPlayerCheckCounter " ) ;
}
# else
# ifdef PRE_ADD_48714
if ( m_nInvalidPlayerCheckCounter > = m_pSession - > GetHackPlayRestraintValue ( ) )
{
if ( m_pSession - > GetDBConnection ( ) )
{
# if defined (_TW)
WCHAR wszBuf [ 100 ] ;
wsprintf ( wszBuf , L " Invalidcount Reached limit Value " ) ;
m_pSession - > GetDBConnection ( ) - > QueryAddAbuseLog ( m_pSession , ABUSE_TWN_EXTENDLOG , wszBuf ) ;
# if defined(PRE_ADD_MULTILANGUAGE)
std : : wstring wszRestraintReason = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 109049 , m_pSession - > m_eSelectedLanguage ) ;
# else //#if defined(PRE_ADD_MULTILANGUAGE)
std : : wstring wszRestraintReason = GetEtUIXML ( ) . GetUIString ( CEtUIXML : : idCategory1 , 109049 ) ;
# endif //#if defined(PRE_ADD_MULTILANGUAGE)
m_pSession - > GetDBConnection ( ) - > QueryAddRestraint ( m_pSession , DBDNWorldDef : : RestraintTargetCode : : Character , DBDNWorldDef : : RestraintTypeCode : : TradeRestraint , wszRestraintReason . c_str ( ) , wszRestraintReason . c_str ( ) , 9999 , DBDNWorldDef : : RestraintDolisReasonCode : : AbuseTradeRestraintCode ) ;
# endif //#if defined (_TW)
CDNMailSender : : Process ( m_pSession , AbuseLog : : Common : : AbuseLog_Reached_MailID ) ;
}
}
# endif //#ifdef PRE_ADD_48714
if ( m_nInvalidPlayerCheckCounter > = m_pSession - > GetHackPlayRestraintValue ( ) * 2 )
{
m_pSession - > DetachConnection ( L " InvalidPlayerCheckCounter " ) ;
}
# endif //#if defined (PRE_ADD_ABUSE_ACCOUNT_RESTRAINT)
}
}
void CDnPlayerActor : : OrderUseSkillToMySummonedMonster ( OrderMySummonedMonsterStruct * pStruct )
{
if ( IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_215 ) )
{
DNVector ( DnBlowHandle ) vlhBlows ;
GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_215 , vlhBlows ) ;
_ASSERT ( 1 = = ( int ) vlhBlows . size ( ) ) ;
if ( false = = vlhBlows . empty ( ) )
{
// <20> <> <EFBFBD> ǵ<EFBFBD> <20> ݰ<EFBFBD> <20> ȿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> Ȯ<> <C8AE> .
float fRangeSQ = pStruct - > fOrderRange * pStruct - > fOrderRange ;
DNVector ( DnMonsterActorHandle ) vlhMonsters ;
for ( list < DnMonsterActorHandle > : : const_iterator iter = m_listSummonMonster . begin ( ) ;
iter ! = m_listSummonMonster . end ( ) ; + + iter )
{
DnMonsterActorHandle hMonster = * iter ;
if ( hMonster & & false = = hMonster - > IsDie ( ) )
{
float fDistanceWithThisMonsterSQ = EtVec3LengthSq ( & EtVector3 ( * GetPosition ( ) - * hMonster - > GetPosition ( ) ) ) ;
if ( fDistanceWithThisMonsterSQ < fRangeSQ )
{
vlhMonsters . push_back ( hMonster ) ;
}
}
}
map < int , list < DnMonsterActorHandle > > : : iterator iterMap = m_mapSummonMonsterByGroup . begin ( ) ;
for ( iterMap ; iterMap ! = m_mapSummonMonsterByGroup . end ( ) ; + + iterMap )
{
const list < DnMonsterActorHandle > & listSummonMonster = iterMap - > second ;
for ( list < DnMonsterActorHandle > : : const_iterator iterList = listSummonMonster . begin ( ) ;
iterList ! = listSummonMonster . end ( ) ; + + iterList )
{
DnMonsterActorHandle hMonster = * iterList ;
if ( hMonster & & false = = hMonster - > IsDie ( ) )
{
float fDistanceWithThisMonsterSQ = EtVec3LengthSq ( & EtVector3 ( * GetPosition ( ) - * hMonster - > GetPosition ( ) ) ) ;
if ( fDistanceWithThisMonsterSQ < fRangeSQ )
{
vlhMonsters . push_back ( hMonster ) ;
}
}
}
}
if ( false = = vlhMonsters . empty ( ) )
{
CDnOrderMySummonedMonsterBlow * pBlow = static_cast < CDnOrderMySummonedMonsterBlow * > ( vlhBlows . front ( ) . GetPointer ( ) ) ;
int iSkillID = pBlow - > GetSkillID ( ) ;
for ( int i = 0 ; i < ( int ) vlhMonsters . size ( ) ; + + i )
{
DnMonsterActorHandle hMonster = vlhMonsters . at ( i ) ;
if ( hMonster - > GetMonsterClassID ( ) = = pStruct - > nMonsterID )
{
// TODO: AI <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ص־<D8B5> <20> <> .
if ( hMonster - > IsExistSkill ( iSkillID ) )
{
MAAiScript * pScript = static_cast < MAAiScript * > ( hMonster - > GetAIBase ( ) ) ;
if ( hMonster - > GetAggroTarget ( ) )
pScript - > GetMonsterSkillAI ( ) - > AddWaitOrderCount ( hMonster , iSkillID ) ;
}
}
}
}
}
}
}
bool CDnPlayerActor : : CheckSkipAirCondition ( int iSkill )
{
if ( IsAir ( ) )
{
bool bHaveGroundCheck = false ;
DnSkillHandle hSkill = FindSkill ( iSkill ) ;
if ( hSkill )
{
if ( hSkill - > IsExistUsableChecker ( IDnSkillUsableChecker : : GROUNDMOVABLE_CHECKER ) )
bHaveGroundCheck = true ;
}
if ( bHaveGroundCheck )
{
return true ;
}
}
return false ;
}
bool CDnPlayerActor : : HasSameGlobalIDSkill ( int iSkillID )
{
bool bResult = false ;
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
int iGlobalSkillGroupID = pSkillTable - > GetFieldFromLablePtr ( iSkillID , " _GlobalSkillGroup " ) - > GetInteger ( ) ;
if ( 0 < iGlobalSkillGroupID )
{
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
DnSkillHandle hExistSkill = GetSkillFromIndex ( i ) ;
if ( hExistSkill & &
hExistSkill - > GetGlobalSkillGroupID ( ) = = iGlobalSkillGroupID )
{
bResult = true ;
break ;
}
}
}
return bResult ;
}
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
bool CDnPlayerActor : : IsAllowCallSkillProcess ( float fDelta )
{
return m_FrameSkipCallSkillProcess . Update ( fDelta ) ;
}
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
void CDnPlayerActor : : RemoveAllBubbles ( bool bRemoveEvent )
{
if ( m_pBubbleSystem )
m_pBubbleSystem - > RemoveAllBubbles ( bRemoveEvent ) ;
}
void CDnPlayerActor : : ApplyEnchantSkillOnceFromBubble ( int iTargetSkillID , int iEnchantSkillID )
{
DnSkillHandle hEnchantSkill ;
map < int , DnSkillHandle > : : iterator iter = m_mapEnchantSkillFromBubble . find ( iEnchantSkillID ) ;
if ( m_mapEnchantSkillFromBubble . end ( ) ! = iter )
{
hEnchantSkill = iter - > second ;
}
else
{
// pvp/pve <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
hEnchantSkill = CDnSkill : : CreateSkill ( GetMySmartPtr ( ) , iEnchantSkillID , 1 ) ;
m_mapEnchantSkillFromBubble . insert ( make_pair ( iEnchantSkillID , hEnchantSkill ) ) ;
}
DnSkillHandle hTargetSkill = FindSkill ( iTargetSkillID ) ;
_ASSERT ( hTargetSkill ) ;
_ASSERT ( hEnchantSkill ) ;
if ( hTargetSkill & & hEnchantSkill )
{
// <20> ̹<EFBFBD> <20> <> ȭ<EFBFBD> <C8AD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bool bIsEnchantedAlready = hTargetSkill - > IsEnchantedSkill ( ) ;
_ASSERT ( false = = bIsEnchantedAlready ) ;
if ( false = = bIsEnchantedAlready )
{
hTargetSkill - > ApplyEnchantSkillOnceFromBubble ( hEnchantSkill ) ;
}
}
}
bool CDnPlayerActor : : OnApplySpectator ( bool bEnable )
{
CDNGameRoom * pGameRoom = GetGameRoom ( ) ;
if ( pGameRoom = = NULL | | pGameRoom - > bIsPvPRoom ( ) = = false | | pGameRoom - > GetPvPGameMode ( ) - > bIsAllKillMode ( ) = = false )
return false ;
if ( bEnable )
{
if ( IsProcessSkill ( ) )
CancelUsingSkill ( ) ;
if ( IsBattleMode ( ) )
SetBattleMode ( false ) ;
}
return true ;
}
bool CDnPlayerActor : : IsSpectatorMode ( )
{
return IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_230 ) ;
}
void CDnPlayerActor : : ChangeSkillLevelUp ( int nSkillID , int nOrigLevel )
{
if ( IsProcessSkill ( ) )
return ;
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( hSkill )
{
if ( hSkill - > GetElapsedDelayTime ( ) > 0.0f | | hSkill - > IsToggleOn ( ) )
return ;
}
__super : : ChangeSkillLevelUp ( nSkillID , nOrigLevel ) ;
DnSkillHandle hChangedSkill = FindSkill ( nSkillID ) ;
if ( hChangedSkill )
{
ReplacementGlyph ( hChangedSkill ) ;
}
}
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
void CDnPlayerActor : : UpdateTotalLevel ( int nLevel )
{
if ( m_pTotalLevelSkillSystem )
{
m_pTotalLevelSkillSystem - > SetTotalLevel ( nLevel ) ;
}
}
void CDnPlayerActor : : UpdateTotalLevelByCharLevel ( )
{
if ( m_pTotalLevelSkillSystem )
m_pTotalLevelSkillSystem - > UpdateTotalLevel ( ) ;
}
void CDnPlayerActor : : AddTotalLevelSkill ( int nSlotIndex , int nSkillID , bool isInitialize /* = false*/ )
{
if ( m_pTotalLevelSkillSystem )
{
DnSkillHandle hSkill = m_pTotalLevelSkillSystem - > FindTotalLevelSkill ( nSkillID ) ;
if ( ! hSkill )
{
RemoveTotalLevelSkill ( nSlotIndex ) ;
return ;
}
//<2F> <> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȱ<> <C8B0> ȭ<EFBFBD> <C8AD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> ..
bool isActivateSlot = m_pTotalLevelSkillSystem - > IsActivateSlot ( nSlotIndex ) ;
if ( isActivateSlot = = false )
return ;
//PVE/PVP<56> <50> <EFBFBD> <EFBFBD> ..
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> pve/pvp <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
int iSkillLevelDataType = CDnSkill : : PVE ;
if ( GetGameRoom ( ) - > bIsPvPRoom ( ) )
iSkillLevelDataType = CDnSkill : : PVP ;
hSkill - > SelectLevelDataType ( iSkillLevelDataType ) ;
m_pTotalLevelSkillSystem - > AddTotalLevelSkill ( nSlotIndex , hSkill , isInitialize ) ;
}
}
void CDnPlayerActor : : RemoveTotalLevelSkill ( int nSlotIndex )
{
if ( m_pTotalLevelSkillSystem )
{
m_pTotalLevelSkillSystem - > RemoveTotallevelSkill ( nSlotIndex ) ;
}
}
void CDnPlayerActor : : ActivateTotalLevelSkillSlot ( int nSlotIndex , bool bActivate )
{
if ( m_pTotalLevelSkillSystem )
m_pTotalLevelSkillSystem - > ActivateTotalLevelSkillSlot ( nSlotIndex , bActivate ) ;
}
void CDnPlayerActor : : ActivateTotalLevelSkillCashSlot ( int nSlotIndex , bool bActivate , __time64_t tExpireDate )
{
if ( m_pTotalLevelSkillSystem )
m_pTotalLevelSkillSystem - > ActivateTotalLevelSkillCashSlot ( nSlotIndex , bActivate , tExpireDate ) ;
}
void CDnPlayerActor : : OnLevelChange ( )
{
UpdateTotalLevelByCharLevel ( ) ;
}
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
void CDnPlayerActor : : ApplyEventStateBlow ( )
{
int nAddStateEffectIndex = - 1 ;
DnBlowHandle hBlow ;
# ifdef PRE_ADD_WEEKLYEVENT
if ( CDnWorld : : GetInstance ( GetRoom ( ) ) . GetMapSubType ( ) ! = EWorldEnum : : MapSubTypeNest & & ! GetGameRoom ( ) - > bIsPvPRoom ( ) )
{
bool bRfreshHP = false ;
float fCurrentHpRatio = ( float ) GetHP ( ) / ( float ) GetMaxHP ( ) ;
int nThreadID = GetGameRoom ( ) - > GetServerID ( ) ;
float fEventHp = g_pDataManager - > GetWeeklyEventValuef ( WeeklyEvent : : Player , GetClassID ( ) , WeeklyEvent : : Event_1 , nThreadID ) ;
if ( fEventHp ! = 0.f )
{
std : : string strValue ;
strValue . append ( boost : : lexical_cast < std : : string > ( fEventHp ) ) ;
nAddStateEffectIndex = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_058 , - 1 , strValue . c_str ( ) , false , true , true ) ;
m_vecEventEffectList . push_back ( nAddStateEffectIndex ) ;
bRfreshHP = true ;
}
float fEventAttack = g_pDataManager - > GetWeeklyEventValuef ( WeeklyEvent : : Player , GetClassID ( ) , WeeklyEvent : : Event_2 , nThreadID ) ;
if ( fEventAttack ! = 0.f )
{
std : : string strValue ;
strValue . append ( boost : : lexical_cast < std : : string > ( fEventAttack ) ) ;
nAddStateEffectIndex = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_002 , - 1 , strValue . c_str ( ) , false , true , true ) ;
m_vecEventEffectList . push_back ( nAddStateEffectIndex ) ;
nAddStateEffectIndex = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_029 , - 1 , strValue . c_str ( ) , false , true , true ) ;
m_vecEventEffectList . push_back ( nAddStateEffectIndex ) ;
}
float fEventDefense = g_pDataManager - > GetWeeklyEventValuef ( WeeklyEvent : : Player , GetClassID ( ) , WeeklyEvent : : Event_3 , nThreadID ) ;
if ( fEventDefense ! = 0.f )
{
std : : string strValue ;
strValue . append ( boost : : lexical_cast < std : : string > ( fEventDefense ) ) ;
nAddStateEffectIndex = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_004 , - 1 , strValue . c_str ( ) , false , true , true ) ;
m_vecEventEffectList . push_back ( nAddStateEffectIndex ) ;
nAddStateEffectIndex = CmdAddStateEffect ( NULL , STATE_BLOW : : BLOW_094 , - 1 , strValue . c_str ( ) , false , true , true ) ;
m_vecEventEffectList . push_back ( nAddStateEffectIndex ) ;
}
if ( bRfreshHP )
{
GetStateBlow ( ) - > Process ( 0 , 0 ) ;
CmdRefreshHPSP ( ( INT64 ) ( GetMaxHP ( ) * fCurrentHpRatio ) , GetSP ( ) ) ;
}
}
# endif
}
void CDnPlayerActor : : RemoveEventStateBlow ( )
{
for ( DWORD index = 0 ; index < m_vecEventEffectList . size ( ) ; + + index )
{
CmdRemoveStateEffectFromID ( m_vecEventEffectList [ index ] ) ;
}
m_vecEventEffectList . clear ( ) ;
}
bool CDnPlayerActor : : CheckSkillAction ( const char * szActionName )
{
if ( strstr ( szActionName , " Skill_ " )
| | strstr ( szActionName , " ChargeShoot_ " )
| | strstr ( szActionName , " GuildSkill_ " )
| | strstr ( szActionName , " Throw_ " )
| | strstr ( szActionName , " Tumble_ " )
| | strstr ( szActionName , " AerialEvasion " ) )
{
return true ;
}
return false ;
}
void CDnPlayerActor : : MakeEquipAndPassiveState ( CDnState & State )
{
State . ResetState ( ) ;
State = MakeEquipState ( ) ;
CDnState BUFF_STATE ;
BUFF_STATE . ResetState ( ) ;
if ( m_pStateBlow )
{
int nSize = m_pStateBlow - > GetNumStateBlow ( ) ;
for ( int i = 0 ; i < nSize ; i + + )
{
DnBlowHandle hBlow = m_pStateBlow - > GetStateBlow ( i ) ;
if ( hBlow & &
CDnCreateBlow : : IsBasicBlow ( hBlow - > GetBlowIndex ( ) ) = = true & &
hBlow - > GetParentSkillInfo ( ) & &
hBlow - > GetParentSkillInfo ( ) - > eSkillType = = CDnSkill : : SkillTypeEnum : : Passive & &
hBlow - > GetParentSkillInfo ( ) - > eDurationType = = CDnSkill : : DurationTypeEnum : : Buff )
{
CDnBasicBlow * pBlow = static_cast < CDnBasicBlow * > ( hBlow . GetPointer ( ) ) ;
if ( pBlow )
{
CDnState * pState = const_cast < CDnState * > ( pBlow - > GetState ( ) ) ;
BUFF_STATE . MergeState ( * pState , pState - > GetValueType ( ) ) ;
}
}
}
}
State . MergeState ( BUFF_STATE , ValueTypeAbsolute ) ;
State . CalculateRatioValue ( BUFF_STATE ) ;
}
# ifdef PRE_ADD_COSTUME_SKILL
void CDnPlayerActor : : RefreshCostumeSkill ( int nSkillIndex , int nSkillLevel )
{
if ( m_nCostumeSkillID = = nSkillIndex )
return ;
if ( m_nCostumeSkillID > 0 )
RemoveSkill ( m_nCostumeSkillID ) ;
if ( nSkillIndex > 0 )
{
AddSkill ( nSkillIndex , nSkillLevel ) ;
DnSkillHandle hSkill = FindSkill ( nSkillIndex ) ;
if ( hSkill )
{
if ( hSkill - > GetSkillType ( ) ! = CDnSkill : : SkillTypeEnum : : Active )
{
RemoveSkill ( nSkillIndex ) ;
return ;
}
hSkill - > OnBeginCoolTime ( ) ;
}
}
m_nCostumeSkillID = nSkillIndex ;
}
# endif // PRE_ADD_COSTUME_SKILL
# ifdef PRE_ADD_VEHICLE_SPECIAL_ACTION
void CDnPlayerActor : : ReportInvalidAction ( )
{
if ( m_pPlayerActionChecker )
( ( CDnPlayerActionChecker * ) m_pPlayerActionChecker ) - > OnInvalidAction ( ) ;
}
# endif