DragonNest/GameCommon/MAActorProp.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

176 lines
No EOL
5.2 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 "MAActorProp.h"
#include "DnMonsterActor.h"
#include "DnWorldActProp.h"
#include "DnActorClassDefine.h"
#include "DnTableDB.h"
#include "DnNPCActor.h"
/*
#ifndef _GAMESERVER
DWORD MAActorProp::s_dwActorPropUniqueID = 0;
vector<DnActorHandle> MAActorProp::s_vlhActorProp;
#else
#include "DNGameDataManager.h"
STATIC_DECL_INIT( MAActorProp, DWORD, s_dwActorPropUniqueID ) = { 0, };
#endif
*/
#ifdef _GAMESERVER
#include "DNGameDataManager.h"
#include "DnGameRoom.h"
#endif
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
MAActorProp::MAActorProp(void)
{
}
MAActorProp::~MAActorProp(void)
{
/*
#ifndef _GAMESERVER
vector<DnActorHandle>::iterator iter = find( s_vlhActorProp.begin(), s_vlhActorProp.end(), m_hMonster );
if( s_vlhActorProp.end() != iter )
s_vlhActorProp.erase( iter );
#endif
*/
SAFE_RELEASE_SPTR( m_hMonster );
}
#ifdef PER_ADD_PROP_TRAP_DIFFICULT_SET
bool MAActorProp::InitializeMonsterActorProp( int nMonsterTableID , BOOL bUseMonsterWeightTable /* = false*/ )
#else
bool MAActorProp::InitializeMonsterActorProp( int nMonsterTableID )
#endif
{
bool bResult = false;
CDnWorldActProp* pWorldActProp = dynamic_cast<CDnWorldActProp*>(this);
if( nMonsterTableID > 0 )
{
#ifdef _GAMESERVER
m_hMonster = CreateActor( pWorldActProp->GetRoom(), -1 );
#else
m_hMonster = CreateActor( -1, false, false, false );
#endif
if( !m_hMonster ) return false;
m_hMonster->SetProcess( false );
CDnMonsterActor *pMonster = dynamic_cast<CDnMonsterActor*>(m_hMonster.GetPointer());
DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TMONSTER );
if( !pSox->IsExistItem( nMonsterTableID ) )
{
SAFE_RELEASE_SPTR( m_hMonster );
return false;
}
//#ifdef _GAMESERVER
pMonster->SetPropHandle( pWorldActProp->GetMySmartPtr() );
//#endif
pMonster->SetMonsterClassID( nMonsterTableID );
pMonster->SetLevel( pSox->GetFieldFromLablePtr( nMonsterTableID, "_Level" )->GetInteger() );
#ifdef _GAMESERVER
pMonster->InitializeRoom( pWorldActProp->GetGameRoom() );
#ifdef PER_ADD_PROP_TRAP_DIFFICULT_SET
if(bUseMonsterWeightTable)
{
// <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Prop(Trap)<29><> AI<41><49> Easy<73><79> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE>ִ<EFBFBD>.
pMonster->SetAIDifficult(pWorldActProp->GetGameRoom()->m_StageDifficulty);
}
#endif // PER_ADD_PROP_TRAP_DIFFICULT_SET
#else
pMonster->InitializeSession( pWorldActProp->GetSession() );
#endif
m_hMonster->Initialize();
m_hMonster->SetPosition( pWorldActProp->GetMatEx()->m_vPosition );
m_hMonster->RefreshState();
m_hMonster->SetHP( m_hMonster->GetMaxHP() );
m_hMonster->SetSP( m_hMonster->GetMaxSP() );
// Note: <20><><EFBFBD><EFBFBD> <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD>ũ <20><><EFBFBD>̵<EFBFBD> ü<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ..
// ScanActor <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><20>־
// Hittable <20>÷<EFBFBD><C3B7>׸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>..
m_hMonster->SetHittable( false );
m_hMonster->RemoveOctreeNode();
m_hMonster->SetActorType( CDnActorState::PropActor );
#ifdef _GAMESERVER
CMultiRoom *pRoom = m_hMonster->GetRoom();
m_hMonster->SetUniqueID( STATIC_INSTANCE_(CDnActor::s_dwUniqueCount)++ );
#else
// NOTE: <20><><EFBFBD><EFBFBD>ũ <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SC_ONDAMAGE <20><>Ŷ<EFBFBD><C5B6> <20>ް<EFBFBD><DEB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>͸<EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> hiiter<65><72> NULL <20><> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>´<EFBFBD> <20>׼<EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
m_hMonster->SetUniqueID( CDnActor::s_dwUniqueCount++ );
// s_vlhActorProp.push_back( m_hMonster );
#endif
pSox = GetDNTable( CDnTableDB::TMONSTER );
char szWeaponLable[32];
for( int j=0; j<2; j++ )
{
sprintf_s( szWeaponLable, "_Weapon%dIndex", j + 1 );
int nWeapon = pSox->GetFieldFromLablePtr( nMonsterTableID, szWeaponLable )->GetInteger();
if( nWeapon < 1 ) continue;
#ifdef _GAMESERVER
DnWeaponHandle hWeapon = CDnWeapon::CreateWeapon( pWorldActProp->GetRoom(), nWeapon, _rand(pWorldActProp->GetRoom()) );
#else
DnWeaponHandle hWeapon = CDnWeapon::CreateWeapon( nWeapon, _rand(/*pWorldActProp*/) );
#endif
m_hMonster->AttachWeapon( hWeapon, j, true );
bResult = true;
}
// hp <20><> 0 <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>
if( 0 >= m_hMonster->GetHP() )
m_hMonster->SetHP( 1 );
}
// _ASSERT( bResult && "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" );
return bResult;
}
bool MAActorProp::InitializeNpcActorProp( int nNpcTableID )
{
CDnWorldActProp* pWorldActProp = dynamic_cast<CDnWorldActProp*>(this);
#ifdef _GAMESERVER
TNpcData* pNpcData = NULL;
pNpcData = g_pDataManager->GetNpcData(nNpcTableID);
if (pNpcData)
m_hMonster = CreateNpcActor( pWorldActProp->GetRoom(), nNpcTableID, pNpcData, pWorldActProp->GetMatEx()->m_vPosition, pWorldActProp->GetRotation()->y );
if( m_hMonster ) m_hMonster->InitializeRoom( pWorldActProp->GetGameRoom() );
#else
m_hMonster = CreateNpcActor( -1, nNpcTableID, pWorldActProp->GetMatEx()->m_vPosition, pWorldActProp->GetRotation()->y );
#endif
if( m_hMonster ) {
CDnNPCActor *pNpc = dynamic_cast<CDnNPCActor *>(m_hMonster.GetPointer());
if( pNpc ) pNpc->SetPropHandle( pWorldActProp->GetMySmartPtr() );
// m_hMonster->SetProcess( false );
#ifndef _GAMESERVER
SAFE_RELEASE_SPTR( m_hMonster->GetAniObjectHandle() );
#endif
m_hMonster->Show( true );
}
return true;
}
bool MAActorProp::CopyActorStateFromThis( DnActorHandle hActor )
{
// <20><><EFBFBD>ȸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
// <20>׽<EFBFBD>Ʈ<EFBFBD><C6AE> <20>ʿ<EFBFBD><CABF><EFBFBD>.
m_hMonster->CopyStateFromThis( /*static_cast<CDnActorState*>(hActor.GetPointer())*/hActor );
return true;
}