📄 player_attack.cpp
字号:
#include "stdafx.h"
#include "Player.h"
#include "float.h"
#include "PublicMath.h"
#include "SkillInfoParser.h"
#include "PVPInfo.h"
BOOL Player::CanAttack() const
{
// PVP 惑怕 眉农
if( m_pPVPInfo->GetPVPState() != ePVP_USER_NONE && m_pPVPInfo->GetPVPState() != ePVP_USER_MATCH )
return FALSE;
return Character::CanAttack();
}
BOOL Player::CanBeAttacked() const
{
// PVP 惑怕 眉农
if( m_pPVPInfo->GetPVPState() != ePVP_USER_NONE && m_pPVPInfo->GetPVPState() != ePVP_USER_MATCH )
return FALSE;
return Character::CanBeAttacked();
}
RC::eBATTLE_RESULT Player::CanNormalAttack( BYTE byAttackType, WzVector &vCurPos, WzVector &vDestPos )
{
// 傍拜 鸥荐 眉农(老窜 撇妨档 逞绢啊 霖促...
if( byAttackType == eATTACK_SEQUENCE_SECOND )
{
if( GetLastAttackSeq() != eATTACK_SEQUENCE_FIRST )
{
SUNLOG( eFULL_LOG, "[Player::CanNormalAttack] ObjectKey[%d] 1鸥 绝捞 2鸥啊 咳", GetObjectKey() );
}
}
else if( byAttackType == eATTACK_SEQUENCE_THIRD )
{
if( GetLastAttackSeq() != eATTACK_SEQUENCE_SECOND )
{
SUNLOG( eFULL_LOG, "[Player::CanNormalAttack] ObjectKey[%d] 2鸥 绝捞 3鸥啊 咳", GetObjectKey() );
}
}
SetLastAttackSeq( byAttackType );
// 敲饭捞绢啊 鞘靛俊 绝栏搁 府畔
Field *pField = GetField();
if( !pField )
{
return RC::RC_BATTLE_PLAYER_NOTEXIST_TO_FIELD;
}
// 泅犁 谅钎啊 蜡瓤茄瘤 眉农
if( !_finite(vCurPos.x) || !_finite(vCurPos.y) || !_finite(vCurPos.z) )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanNormalAttack] CurPos is Invalid! x[%f] y[%f] z[%f]", vCurPos.x, vCurPos.y, vCurPos.z );
return RC::RC_BATTLE_INVLIDPOS;
}
// 格利瘤 谅钎啊 蜡瓤茄瘤 眉农
if( !_finite(vDestPos.x) || !_finite(vDestPos.y) || !_finite(vDestPos.z) )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanNormalAttack] DestPos is Invalid! x[%f] y[%f] z[%f]", vDestPos.x, vDestPos.y, vDestPos.z );
return RC::RC_BATTLE_INVLIDPOS;
}
// 敲饭捞绢啊 傍拜且 荐 绝绰 惑怕捞搁 府畔
if( !CanAttack() ) return RC::RC_BATTLE_PLAYER_STATE_WHERE_CANNOT_ATTACK_ENEMY;
// 剐府绰 芭府(绢琶矫累痢-绢琶场痢)啊 呈公 辨搁 立加阑 谗绰促.
if( Math_Vector2DLength( vCurPos, vDestPos ) > 3.0f )
{
SUNLOG( eCRITICAL_LOG, "[Player::CanNormalAttack] 敲饭捞绢 傍拜 场 谅钎 秦欧 啊瓷己 乐澜" );
return RC::RC_BATTLE_THRUST_DIST_OVER;
}
// 酒流 咀记 档吝牢 版快 捞 菩哦篮 秦欧栏肺 埃林秦档 公规窃
if( IsDoingAction() )
{
SUNLOG( eFULL_LOG, "[Player::CanNormalAttack] Already Doing Action! TimeInterval[%d] ProgressRatio[%f] ", m_ActionTimer.GetIntervalTime() , m_ActionTimer.GetProgressRatio() );
return RC::RC_BATTLE_ALREADY_DOING_ACTION;
}
return RC::RC_BATTLE_SUCCESS;
}
RC::eBATTLE_RESULT Player::CanStyleAttack( BYTE byAttackType, SLOTCODE StyleCode, WzVector &vCurPos, WzVector &vDestPos )
{
// 傍拜 啊瓷茄瘤 扁夯利牢 荤亲阑 眉农茄促.
RC::eBATTLE_RESULT rcResult = CanNormalAttack( byAttackType, vCurPos, vDestPos );
if( rcResult != RC::RC_BATTLE_SUCCESS )
{
return rcResult;
}
// 急琶茄 胶鸥老牢瘤 眉农
if( GetSelectedStyle() != StyleCode )
{
SUNLOG( eFULL_LOG, "[Player::CanStyleAttack] The StyleCode[%d] Of Server is different from the StyleCode[%d] of Client!", GetSelectedStyle(), StyleCode );
return RC::RC_BATTLE_STYLECODE_WHERE_DONOT_SELECT;
}
BASE_STYLEINFO *pBaseStyleInfo = SkillInfoParser::Instance()->GetStyleInfo( StyleCode );
if( !pBaseStyleInfo ) return RC::RC_BATTLE_BASEINFO_NOTEXIST;
// 努贰胶 力茄俊 吧府绰瘤 眉农
if( GetCharType() != pBaseStyleInfo->m_byClassDefine )
{
SUNLOG( eFULL_LOG, "[Player::CanStyleAttack] The Type Of Character is Invalid! Style[%d] CharType[%d]", StyleCode, GetCharType() );
return RC::RC_BATTLE_CHAR_CLASS_LIMIT;
}
// 公扁力茄俊 吧府绰瘤 眉农
if( GetWeaponKind() != pBaseStyleInfo->m_iWeaponDefine )
{
SUNLOG( eFULL_LOG, "[Player::CanStyleAttack] The Weapon Type is Invalid! Style[%d] Weapon[%d]", StyleCode, GetWeaponKind() );
return RC::RC_BATTLE_WEAPON_LIMIT;
}
return RC::RC_BATTLE_SUCCESS;
}
VOID Player::SetAttackDelay( BYTE byAttackType, SLOTCODE StyleCode )
{
BASE_STYLEINFO *pBaseStyleInfo = SkillInfoParser::Instance()->GetStyleInfo( StyleCode );
// 咀记 掉饭捞 汲沥
DWORD dwActionDelay;
switch( byAttackType )
{
case eATTACK_SEQUENCE_FIRST:
dwActionDelay = pBaseStyleInfo->m_wTimeFirst;
break;
case eATTACK_SEQUENCE_SECOND:
dwActionDelay = pBaseStyleInfo->m_wTimeSecond;
break;
case eATTACK_SEQUENCE_THIRD:
dwActionDelay = pBaseStyleInfo->m_wTimeThird;
break;
default:
SUNLOG( eCRITICAL_LOG, "[Player::SetAttackDelay] Invalid attack sequence! Style[%d] byAttackType[%d]", StyleCode, byAttackType );
ForceDisconnect( INVALID_ATTACK_SEQUENCE );
return;
}
// 辑滚螟 咀记 掉饭捞甫 距埃 咯蜡乐霸 棱绰促.
dwActionDelay = (DWORD)(dwActionDelay * 0.9f);
if( 0 != GetPhysicalAttackSpeed() )
{
SetActionDelay( (DWORD)( dwActionDelay / GetPhysicalAttackSpeed() ) );
}
else
{
SUNLOG( eCRITICAL_LOG, " [Player::SetAttackDelay] GetPhysicalAttackSpeed() = 0!");
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -