DragonNest/GameCommon/UnitTest/PlayerState_unittest.cc
2024-12-19 09:48:26 +08:00

251 lines
8.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "stdafx.h"
#include "./boost/scoped_ptr.hpp"
#include "DNGameRoom.h"
#include "DnPlayerActor.h"
#include "TDnPlayerWarrior.h"
// --gtest_filter=PlayerState_unittest.*
#if !defined( _FINAL_BUILD ) && !defined (__COVERITY__)
class PlayerState_unittest:public testing::Test
{
protected:
virtual void SetUp()
{
MAGAReqRoomID Packet;
memset( &Packet, 0, sizeof(Packet) );
m_pRoom = new CDNGameRoom( NULL, 0, &Packet );
m_pPlayerActor = (new TDnPlayerWarrior<CDnPlayerActor>( m_pRoom, 1 ) );
m_pPlayerActor->InitializeRoom(m_pRoom);
m_pPlayerActor->SetJobHistory(1);
m_pPlayerActor->SetLevel(50);
m_pPlayerActor->RefreshState();
}
virtual void TearDown()
{
SAFE_DELETE(m_pPlayerActor);
SAFE_DELETE(m_pRoom);
}
static void SetUpTestCase()
{
m_pResMng = new CEtResourceMng( false, true );
EXPECT_TRUE( m_pResMng->AddResourcePath( "r:\\gameres\\resource\\ext" ) );
m_pTableDB = new CDnTableDB();
EXPECT_TRUE( m_pTableDB->Initialize() );
}
static void TearDownTestCase()
{
SAFE_DELETE(m_pTableDB);
SAFE_DELETE(m_pResMng);
}
CDNGameRoom *m_pRoom;
CDnPlayerActor *m_pPlayerActor;
static CEtResourceMng* m_pResMng;
static CDnTableDB* m_pTableDB;
};
CEtResourceMng* PlayerState_unittest::m_pResMng = NULL;
CDnTableDB* PlayerState_unittest::m_pTableDB = NULL;
#define USE_POST_UPGRADE_PLAYERSTATUS_VERSION
TEST_F( PlayerState_unittest, Test_AttackP )
{
int nOriginalAttackMin = m_pPlayerActor->GetAttackPMin();
int nOriginalAttackMax = m_pPlayerActor->GetAttackPMax();
CDnState *pEquipStateAbsolute = new CDnState;
pEquipStateAbsolute->ResetState();
pEquipStateAbsolute->SetAttackPMin(100);
pEquipStateAbsolute->SetAttackPMax(100);
pEquipStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false );
#else
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false , false );
#endif
CDnState *pEquipStateRatio = new CDnState;
pEquipStateRatio->ResetState();
pEquipStateRatio->SetAttackPMinRatio(0.2f);
pEquipStateRatio->SetAttackPMaxRatio(0.2f);
pEquipStateRatio->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pEquipStateRatio , CDnActorState::Equip_Buff_Level , false );
#else
m_pPlayerActor->AddBlowState( pEquipStateRatio , CDnActorState::Equip_Buff_Level , false , false );
#endif
CDnState *pBuffStateAbsolute = new CDnState;
pBuffStateAbsolute->ResetState();
pBuffStateAbsolute->SetAttackPMin(100);
pBuffStateAbsolute->SetAttackPMax(100);
pBuffStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true );
#else
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true , true );
#endif
CDnState *pBuffStateRatio = new CDnState;
pBuffStateRatio->ResetState();
pBuffStateRatio->SetAttackPMinRatio(-0.2f);
pBuffStateRatio->SetAttackPMaxRatio(-0.2f);
pBuffStateRatio->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pBuffStateRatio , CDnActorState::Equip_Buff_Level , true );
#else
m_pPlayerActor->AddBlowState( pBuffStateRatio , CDnActorState::Equip_Buff_Level , true , true );
#endif
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> GetUseRegulation() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϴµ<CFB4> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӷ뿡<D3B7><EBBFA1> <20><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE>ϴµ<CFB4>
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20><> <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>ϽǶ<CFBD><C7B6><EFBFBD> <20>ش<EFBFBD><D8B4>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4> <20><> <20><><EFBFBD>Ұ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
// GetUseRegulation() <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> { return <20><><EFBFBD>ϴ°<CFB4>; } <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>׽<EFBFBD>Ʈ <20>ϼ<EFBFBD><CFBC><EFBFBD>
m_pPlayerActor->RefreshState( CDnPlayerState::RefreshAll , CDnPlayerState::ST_AttackP );
int nMinAttackP = m_pPlayerActor->GetAttackPMin();
int nMaxAttackP = m_pPlayerActor->GetAttackPMax();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD>̽<EFBFBD> <20><>(<28><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD> <20><>) +<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD>) + ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) + <20><>ų <20><><EFBFBD>
int nBaseValue = nOriginalAttackMin;
int nEquipLevel = ( nBaseValue + 100 ) + (int)( (nBaseValue + 100) * 0.2f ); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nBuffLevel = ( nEquipLevel + 100 ) + (int)( (nEquipLevel + 100) * -0.2f );
EXPECT_TRUE(nMinAttackP == nBuffLevel);
nBaseValue = nOriginalAttackMax;
nEquipLevel = ( nBaseValue + 100 ) + (int)( (nBaseValue + 100) * 0.2f ); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
nBuffLevel = ( nEquipLevel + 100 ) + (int)( (nEquipLevel + 100) * -0.2f );
EXPECT_TRUE(nMaxAttackP == nBuffLevel);
}
TEST_F( PlayerState_unittest, Test_Strength )
{
int nOriginalStrength = m_pPlayerActor->GetStrength();
CDnState *pEquipStateAbsolute = new CDnState;
pEquipStateAbsolute->ResetState();
pEquipStateAbsolute->SetStrength(100);
pEquipStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false );
#else
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false , false );
#endif
CDnState *pEquipStateRatio = new CDnState;
pEquipStateRatio->ResetState();
pEquipStateRatio->SetStrengthRatio(0.2f);
pEquipStateRatio->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pEquipStateRatio , CDnActorState::Equip_Buff_Level , false );
#else
m_pPlayerActor->AddBlowState( pEquipStateRatio , CDnActorState::Equip_Buff_Level , false , false );
#endif
CDnState *pBuffStateAbsolute = new CDnState;
pBuffStateAbsolute->ResetState();
pBuffStateAbsolute->SetStrength(100);
pBuffStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true );
#else
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true , true );
#endif
CDnState *pBuffStateRatio = new CDnState;
pBuffStateRatio->ResetState();
pBuffStateRatio->SetStrengthRatio(-0.2f);
pBuffStateRatio->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pBuffStateRatio , CDnActorState::Equip_Buff_Level , true );
#else
m_pPlayerActor->AddBlowState( pBuffStateRatio , CDnActorState::Equip_Buff_Level , true , true );
#endif
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> GetUseRegulation() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϴµ<CFB4> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӷ뿡<D3B7><EBBFA1> <20><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE>ϴµ<CFB4>
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20><> <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>ϽǶ<CFBD><C7B6><EFBFBD> <20>ش<EFBFBD><D8B4>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4> <20><> <20><><EFBFBD>Ұ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
// GetUseRegulation() <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> { return <20><><EFBFBD>ϴ°<CFB4>; } <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>׽<EFBFBD>Ʈ <20>ϼ<EFBFBD><CFBC><EFBFBD>
m_pPlayerActor->RefreshState( CDnPlayerState::RefreshAll , CDnPlayerState::ST_Strength );
int nFinalValue = m_pPlayerActor->GetStrength();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD>̽<EFBFBD> <20><>(<28><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD> <20><>) +<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD>) + ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) + <20><>ų <20><><EFBFBD>
// <20><>Ţ(#<23>⺻# <20><><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD>(#<23><>Ţ# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD>)
int nBaseValue = nOriginalStrength;
int nEquipLevel = ( nBaseValue + 100 ) + (int)( (nBaseValue + 100) * 0.2f ); // + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nBuffLevel = ( nEquipLevel + 100 ) + (int)( (nEquipLevel + 100) * -0.2f );
EXPECT_TRUE( nFinalValue == nBuffLevel );
}
TEST_F( PlayerState_unittest, Test_ElementAttack )
{
float fOriginalElementAttack = m_pPlayerActor->GetElementAttack( CDnState::Fire);
CDnState *pEquipStateAbsolute = new CDnState;
pEquipStateAbsolute->ResetState();
pEquipStateAbsolute->SetElementAttack( CDnState::Fire ,0.3f );
pEquipStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false );
#else
m_pPlayerActor->AddBlowState( pEquipStateAbsolute , CDnActorState::Equip_Buff_Level , false , false );
#endif
CDnState *pBuffStateAbsolute = new CDnState;
pBuffStateAbsolute->ResetState();
pBuffStateAbsolute->SetElementAttack( CDnState::Fire , 0.3f );
pBuffStateAbsolute->CalcValueType();
#ifdef USE_POST_UPGRADE_PLAYERSTATUS_VERSION
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true );
#else
m_pPlayerActor->AddBlowState( pBuffStateAbsolute , CDnActorState::Equip_Buff_Level , true , true );
#endif
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> GetUseRegulation() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϴµ<CFB4> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ӷ뿡<D3B7><EBBFA1> <20><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE>ϴµ<CFB4>
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20><> <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>ϽǶ<CFBD><C7B6><EFBFBD> <20>ش<EFBFBD><D8B4>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4> <20><> <20><><EFBFBD>Ұ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
// GetUseRegulation() <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> { return <20><><EFBFBD>ϴ°<CFB4>; } <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>׽<EFBFBD>Ʈ <20>ϼ<EFBFBD><CFBC><EFBFBD>
m_pPlayerActor->RefreshState( CDnPlayerState::RefreshAll , CDnPlayerState::ST_ElementAttack );
float fFinalValue = m_pPlayerActor->GetElementAttack( CDnState::Fire );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD>̽<EFBFBD> <20><>(<28><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD> <20><>) +<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD> <20><><EFBFBD><EFBFBD>) + ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) + <20><>ų <20><><EFBFBD>
float fBaseValue = fOriginalElementAttack;
float fEquipLevel = ( fBaseValue + 0.3f ); // + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
float fBuffLevel = ( fEquipLevel + 0.3f );
EXPECT_TRUE( fFinalValue == fBuffLevel );
}
#endif