初步修复
This commit is contained in:
parent
8fc4357cc6
commit
e4714f3f0e
46705 changed files with 12004901 additions and 0 deletions
242
Server/DNGameServer/DnActorClassDefine.cpp
Normal file
242
Server/DNGameServer/DnActorClassDefine.cpp
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
#include "StdAfx.h"
|
||||
#include "DnActorClassDefine.h"
|
||||
#include "DnTableDB.h"
|
||||
|
||||
// Player
|
||||
// Template
|
||||
#include "TDnPlayerWarrior.h"
|
||||
#include "TDnPlayerArcher.h"
|
||||
#include "TDnPlayerCleric.h"
|
||||
#include "TDnPlayerSoceress.h"
|
||||
|
||||
#ifdef PRE_ADD_LENCEA
|
||||
#include "TDnPlayerLencea.h"
|
||||
#endif
|
||||
#ifdef PRE_ADD_MACHINA
|
||||
#include "TDnPlayerMachina.h"
|
||||
#endif
|
||||
|
||||
// Non Local
|
||||
#include "DnNLPAArcher.h"
|
||||
#include "DnNLPASoceress.h"
|
||||
#if defined(PRE_ADD_ACADEMIC)
|
||||
#include "DnNLPAAcademic.h"
|
||||
#endif // #if defined(PRE_ADD_ACADEMIC)
|
||||
#ifdef PRE_ADD_KALI
|
||||
#include "DnNLPAKali.h"
|
||||
#endif // #ifdef PRE_ADD_KALI
|
||||
#if defined( PRE_ADD_ASSASSIN )
|
||||
#include "DnNLPAAssassin.h"
|
||||
#endif // #if defined( PRE_ADD_ASSASSIN )
|
||||
|
||||
// Monster
|
||||
#include "DnMonsterActor.h"
|
||||
#include "DnNormalMonsterActor.h"
|
||||
#include "DnCannonMonsterActor.h"
|
||||
#include "DnDefenseMonsterActor.h"
|
||||
#include "DnGiantMonsterActor.h"
|
||||
#include "DnSimpleRushMonsterActor.h"
|
||||
#include "DnBasiliskMonsterActor.h"
|
||||
#include "DnBeholderMonsterActor.h"
|
||||
#include "DnManticoreMonsterActor.h"
|
||||
#include "DnCelberosMonsterActor.h"
|
||||
#include "DnClericRelicMonster.hpp"
|
||||
#include "DnLotusGolemMonsterActor.h"
|
||||
|
||||
// Custom Monster
|
||||
#include "DnGhoulMonsterActor.h"
|
||||
#include "DnLamiaMonsterActor.h"
|
||||
#include "DnSpittlerMonsterActor.h"
|
||||
#include "DnSeadragonMonsterActor.h"
|
||||
#include "DnGreenDragonMonsterActor.h"
|
||||
#include "DnNormalNestBossMonsterActor.h"
|
||||
|
||||
// npc
|
||||
#include "DnNPCActor.h"
|
||||
|
||||
// Prop Actor
|
||||
#include "DnPropActor.h"
|
||||
|
||||
// Reference Actor Mathod Class
|
||||
#include "MAPartsBody.h"
|
||||
#include "DnActorState.h"
|
||||
|
||||
#include "PerfCheck.h"
|
||||
|
||||
#include "DnHideMonsterActor.h"
|
||||
#ifdef PRE_FIX_MEMOPT_EXT
|
||||
#include "DNGameDataManager.h"
|
||||
#endif
|
||||
|
||||
|
||||
DnActorHandle CreateActor( CMultiRoom *pRoom, int nActorTableID, int nTeamSetting )
|
||||
{
|
||||
DnActorHandle hActor;
|
||||
|
||||
DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TACTOR );
|
||||
if( !pSox )
|
||||
{
|
||||
g_Log.Log( LogType::_FILELOG, L"ActorTable.ext failed\r\n");
|
||||
return hActor;
|
||||
}
|
||||
|
||||
int nDefaultTeam = 0;
|
||||
if( nActorTableID == -1 )
|
||||
{
|
||||
hActor = (new IBoostPoolDnMonsterActor(pRoom, -1))->GetMySmartPtr();
|
||||
nDefaultTeam = 1;
|
||||
}
|
||||
else {
|
||||
if( !pSox->IsExistItem( nActorTableID ) ) return CDnActor::Identity();
|
||||
CDnActorState::ActorTypeEnum ActorType = (CDnActorState::ActorTypeEnum)pSox->GetFieldFromLablePtr( nActorTableID, "_Class" )->GetInteger();
|
||||
|
||||
char *pName = pSox->GetFieldFromLablePtr( nActorTableID, "_StaticName" )->GetString();
|
||||
switch( ActorType ) {
|
||||
case CDnActorState::Warrior: hActor = (new TDnPlayerWarrior<CDnPlayerActor>(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Archer: hActor = (new CDnNLPAArcher(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Soceress: hActor = (new CDnNLPASoceress(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Cleric: hActor = (new TDnPlayerCleric<CDnPlayerActor>(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#if defined(PRE_ADD_ACADEMIC)
|
||||
case CDnActorState::Academic: hActor = (new CDnNLPAAcademic(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#endif // #if defined(PRE_ADD_ACADEMIC)
|
||||
#ifdef PRE_ADD_KALI
|
||||
case CDnActorState::Kali: hActor = (new CDnNLPAKali(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#endif // #ifdef PRE_ADD_KALI
|
||||
#if defined( PRE_ADD_ASSASSIN )
|
||||
case CDnActorState::Assassin: hActor = (new CDnNLPAAssassin(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#endif // #if defined( PRE_ADD_ASSASSIN )
|
||||
#ifdef PRE_ADD_LENCEA
|
||||
case CDnActorState::Lencea: hActor = (new TDnPlayerLencea<CDnPlayerActor>(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#endif // #ifdef PRE_ADD_ASSASSIN
|
||||
#ifdef PRE_ADD_MACHINA
|
||||
case CDnActorState::Machina: hActor = (new TDnPlayerMachina<CDnPlayerActor>(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
#endif
|
||||
|
||||
case CDnActorState::Defense:
|
||||
if( strstr( pName, "Lamia" ) ) {
|
||||
hActor = (new CDnLamiaMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
hActor = (new IBoostPoolDnDefenseMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
case CDnActorState::SimpleRush:
|
||||
if( strstr( pName, "Ghoul" ) ) {
|
||||
hActor = (new CDnGhoulMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
else if( strstr( pName, "Spittler" ) )
|
||||
{
|
||||
hActor = (new CDnSpittlerMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
else if( strstr( pName, "Cleric_Relic" ) )
|
||||
{
|
||||
hActor = (new CDnClericRelicMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
else if (strstr(pName, "HideMonster"))
|
||||
{
|
||||
hActor = (new CDnHideMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
#if defined( PRE_ADD_ACADEMIC )
|
||||
else if (strstr(pName, "Academic_Automat"))
|
||||
{
|
||||
hActor = (new CDnAcademicAutomatMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
#endif // #if defined( PRE_ADD_ACADEMIC )
|
||||
|
||||
hActor = (new IBoostPoolDnSimpleRushMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
case CDnActorState::Normal:
|
||||
case CDnActorState::Disturbance:
|
||||
case CDnActorState::Range:
|
||||
case CDnActorState::Rush:
|
||||
case CDnActorState::Magic:
|
||||
case CDnActorState::Trap:
|
||||
case CDnActorState::NoAggro:
|
||||
{
|
||||
hActor = (new IBoostPoolDnNormalMonsterActor(pRoom, nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
case CDnActorState::NoAggroTrap:
|
||||
{
|
||||
hActor = (new CDnNoAggroTrapMonsterActor(pRoom,nActorTableID))->GetMySmartPtr();
|
||||
break;
|
||||
}
|
||||
case CDnActorState::Cannon: hActor = (new CDnCannonMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Crocodile: //rlkt_test crocodile
|
||||
case CDnActorState::Giant: hActor = (new CDnGiantMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Basilisk: hActor = (new CDnBasiliskMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Beholder: hActor = (new CDnBeholderMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Manticore: hActor = (new CDnManticoreMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Cerberos: hActor = (new CDnCelberosMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::SeaDragon: hActor = (new CDnSeadragonMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::GreenDragon: hActor = (new CDnGreenDragonMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::LotusGolem: hActor = (new CDnLotusGolemMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Vehicle : hActor = (new CDnVehicleActor(pRoom,nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::Npc: hActor = (new CDnNPCActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::PropActor: hActor = (new CDnPropActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
case CDnActorState::NESTBOSS: hActor = (new CDnNormalNestBossMonsterActor(pRoom, nActorTableID))->GetMySmartPtr(); break;
|
||||
default:
|
||||
return CDnActor::Identity();
|
||||
}
|
||||
|
||||
#ifdef PRE_FIX_MEMOPT_EXT
|
||||
char* szSkinName = NULL, *szAniName = NULL, *szActName = NULL;
|
||||
DNTableFileFormat* pFileNameSox = GetDNTable( CDnTableDB::TFILE );
|
||||
if (g_pDataManager && pFileNameSox)
|
||||
{
|
||||
szSkinName = g_pDataManager->GetFileNameFromFileEXT(pSox, nActorTableID, "_SkinName", pFileNameSox);
|
||||
szAniName = g_pDataManager->GetFileNameFromFileEXT(pSox, nActorTableID, "_AniName", pFileNameSox);
|
||||
szActName = g_pDataManager->GetFileNameFromFileEXT(pSox, nActorTableID, "_ActName", pFileNameSox);
|
||||
}
|
||||
#else
|
||||
// 오브젝트 생성!!
|
||||
char* szSkinName = pSox->GetFieldFromLablePtr( nActorTableID, "_SkinName" )->GetString();
|
||||
char* szAniName = pSox->GetFieldFromLablePtr( nActorTableID, "_AniName" )->GetString();
|
||||
char* szActName = pSox->GetFieldFromLablePtr( nActorTableID, "_ActName" )->GetString();
|
||||
#endif
|
||||
if( !szAniName || !szActName )
|
||||
{
|
||||
SAFE_RELEASE_SPTR( hActor );
|
||||
return CDnActor::Identity();
|
||||
}
|
||||
|
||||
if( hActor->bIsSingleBody() )
|
||||
{
|
||||
if( !szSkinName ) {
|
||||
SAFE_RELEASE_SPTR( hActor );
|
||||
return CDnActor::Identity();
|
||||
}
|
||||
hActor->LoadSkin( CEtResourceMng::GetInstance().GetFullName( szSkinName ).c_str(), CEtResourceMng::GetInstance().GetFullName( szAniName ).c_str() );
|
||||
}
|
||||
else if( hActor->bIsPartsBody() )
|
||||
{
|
||||
hActor->LoadSkin( CEtResourceMng::GetInstance().GetFullName( szSkinName ).c_str(), CEtResourceMng::GetInstance().GetFullName( szAniName ).c_str() );
|
||||
}
|
||||
|
||||
hActor->LoadAction( CEtResourceMng::GetInstance().GetFullName( szActName ).c_str() );
|
||||
|
||||
// 팀 세팅 부분
|
||||
if ( nTeamSetting < 0 )
|
||||
{
|
||||
if( ActorType <= CDnActorState::Reserved6 ) nDefaultTeam = 0;
|
||||
else nDefaultTeam = 1;
|
||||
}
|
||||
else nDefaultTeam = nTeamSetting;
|
||||
}
|
||||
|
||||
#if defined( STRESS_TEST )
|
||||
static int iStaticTeam = 0;
|
||||
nDefaultTeam = ++iStaticTeam;
|
||||
#endif
|
||||
|
||||
hActor->SetTeam( nDefaultTeam );
|
||||
hActor->SetMovement( hActor->CreateMovement() );
|
||||
hActor->GetMovement()->CMultiElement::Initialize( pRoom );
|
||||
hActor->GetMovement()->Initialize( hActor.GetPointer(), hActor->GetMatEx() );
|
||||
|
||||
return hActor;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue