⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player_attack.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -