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

📄 npc.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
////////////////////////////////////////////////////////////////////////////////////////
//	NPC.cpp : implementation file
//
//
//	- NPC Status Diagram 累己	[碍辆龋]
//
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "NPC.h"
#include "DBSocket.h"
#include "CUdpSocket.h"
#include "MapServerSocket.h"
#include "ServerMem.h"

#include "CLog.h"
#include "QuestEngine.h"

#ifdef DEF_AZIT
	#include "AzitManager.h"
	#include "Azit.h"
#endif

////////////////////////////////////////////////////////////////////////////////////////
//	Global Class
////////////////////////////////////////////////////////////////////////////////////////
extern	CQuestEngine	*g_pQuestEngine;	//	Quest Engine
extern	MapServerSocket	*g_pServer;			//	Map Server
extern	BaseData		g_Base;				//	Data Base 包访
extern	Map				*g_pMap;			//	MAP 包府 (User捞悼)

extern	_LPDBSOCK		g_lpDBSock;			//	World Server傈价侩
extern	_LPUDPSOCKET	g_lpUdpSock;		//	Wrod Server傈价侩
extern	_LPCLOGMANAGER	g_lpLog ;
extern	ServerMem		*g_pServerMem;


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////////////////////////////
//	Construction/Destruction
//
////////////////////////////////////////////////////////////////////////////////////////
NPC::NPC()
{
	m_pNPCList		=	new _ZP_NPCLIST_REP;	
	m_pAttackSkill	=	new	CEnchant;

	//	memset( m_pNPCList, 0x0, sizeof( _ZP_NPCLIST_REP ) );

	m_pAssistSkill	=	NULL;
	m_pOnKillSkill	=	NULL;
	m_pOnAttackSkill=	NULL;	
	m_pTimeSkill	=	NULL;

	m_pCurseSkill	=	NULL ;

	Clear_NPC();

	m_pDropItem		=	NULL;

	m_bPoolUse		=	false;
}

NPC::~NPC()
{	
	//	--------------------------------------------------------------------------------
	//	NPC LIST包访 Memory	Free	
	//	--------------------------------------------------------------------------------
	if( m_pNPCList		)		
		delete m_pNPCList;	

	//	--------------------------------------------------------------------------------
	//	NPC Skill Delete
	//	--------------------------------------------------------------------------------
	if(	m_pAttackSkill	)		//	ATTACK SKILL Memory Free
		delete	m_pAttackSkill;	

	if( m_pAssistSkill	)
		delete	m_pAssistSkill;

	if( m_pOnKillSkill	)
		delete	m_pOnKillSkill;

	if( m_pOnAttackSkill)
		delete	m_pOnAttackSkill;
	

	if( m_pTimeSkill	)
		delete	m_pTimeSkill;

	if( m_pCurseSkill )	
		delete m_pCurseSkill;

	//	--------------------------------------------------------------------------------
	//	Drop Item Memory Free
	//	--------------------------------------------------------------------------------
	if( m_pDropItem )			
		delete m_pDropItem;	
}


////////////////////////////////////////////////////////////////////////////////////////
//	眠饶 颇扼固磐 函荐甫 眠啊 矫糯 
//
//	-	MAP俊 NPC殿废 流立 殿废 矫糯 
//	-	MAP Class俊 眠饶 烹钦窍档废 累诀 
////////////////////////////////////////////////////////////////////////////////////////
NPC::NPC( _NPC_ *pNPC )
{
	//	--------------------------------------------------------------------------------	
	//	荤侩 函荐 檬扁拳
	//	--------------------------------------------------------------------------------
	m_pNPCList		=	new _ZP_NPCLIST_REP;	
	m_pAttackSkill	=	new	CEnchant;

	m_pAssistSkill	=	NULL;
	m_pOnKillSkill	=	NULL;
	m_pOnAttackSkill=	NULL;
	m_pTimeSkill	=	NULL;
	m_pCurseSkill 	=	NULL;
	m_pDropItem		=	NULL;

	//	memset( m_pNPCList, 0x0, sizeof( _ZP_NPCLIST_REP ) );

	Clear_NPC();

	//	--------------------------------------------------------------------------------
	//	NPC甫 积己 矫糯 
	//	--------------------------------------------------------------------------------
	m_dwHandle				= g_pMap->CreateTempHandle();		//	货肺款 NPC Handle 蔼阑  掘澜 
	m_nMapLayer				= pNPC->nMapLayer;					//	NPC困摹 Map Array
	m_dwDBSEQ				= pNPC->nIndex;						//	DB SEQ蔼 檬扁拳 

	//	--------------------------------------------------------------------------------
	//	积己俊 角菩茄 坷幅 贸府 风凭阑 梅啊矫糯
	//	--------------------------------------------------------------------------------
	if( !SetBaseNPC( m_dwDBSEQ ) )								//	NPC 扁夯单捞鸥 涝仿
	{
		ErrorMsg( "(X) Map Index=%d, Monster Index=%d,m_dwDBSEQ (%d)",pNPC->nMapLayer, pNPC->nIndex,m_dwDBSEQ );
		delete this;

		return;
	}
	
	//	--------------------------------------------------------------------------------
	//	檬扁 矫累 蔼阑 且寸 矫糯
	//	--------------------------------------------------------------------------------
	m_nTurnNum				= abs(m_dwHandle % MAX_NPCTURN_NUM);//	NPC悼累 Turn

	m_nCounterTurnNum		= (m_nTurnNum + MAX_NPCTURN_NUM /2) % MAX_NPCTURN_NUM ;

	m_StartPoint			= pNPC->StartPoint;					//	檬扁 困摹 蔼 历厘 
	
	m_pNPCList->wRotation	= pNPC->nRotation;					//	NPC雀傈 阿档 

	m_Tile.x				= (WORD)m_StartPoint.x / 100;		//	NPC困摹 Tile			
	m_Tile.y				= (WORD)m_StartPoint.y / 100;	
	
	m_MoveFrom				= m_StartPoint;					//	捞悼 矫累 困摹 檬扁拳	
	m_MoveTo				= m_StartPoint;					//	捞悼 格利 困摹 檬扁拳	

			
	//	--------------------------------------------------------------------------------
	//	NPC狼 檬扁 惑怕
	//	--------------------------------------------------------------------------------
	
	//	檬扁 蔼阑 ROMMING 惑怕肺 函版矫糯
	if( IsMonster() )
	{
		if( pNPC->nStrategy == STRATEGY_STAND )
			pNPC->nStrategy	=	STRATEGY_ROAMING;
	}

	m_nBaseStrategy			= pNPC->nStrategy;					//	傈帆
	m_nStrategy				= m_nBaseStrategy;					//	Base傈帆阑 涝仿 矫糯 

	m_nStepNow				= 0;

	ClearTarget();

	m_dwSummoner			= 0; 

	m_lpParentFD			= NULL ;
	m_bIsSendDeadPacket		= false ;

	m_pStrategicTarget		= NULL ;
	m_pGuardTarget			= NULL ;

	//	--------------------------------------------------------------------------------
	//	NPC捞悼 困摹 蔼阑 涝仿 矫糯 
	//	--------------------------------------------------------------------------------
	if( pNPC->point[0].x == 0 )
	{
		m_ptPoints[0].x		= m_Tile.x;
		m_ptPoints[0].y		= m_Tile.y;
	}
	else
	{
		for( int i= 0; i < MAXNODES; i++ )
		{
			m_ptPoints[i]	= pNPC->point[i];
		}
	}
	
	//	--------------------------------------------------------------------------------
	// 秦寸 NPC甫 困摹俊 且寸 矫糯	(GAME MAP)	
	//	--------------------------------------------------------------------------------
#ifdef	DEF_ZONEBOSS
	if( m_nClassType == MONSTER_UNIQUE || 
		m_nClassType == MONSTER_ZONEBOSS  )
#else
	if( m_nClassType == MONSTER_UNIQUE)
#endif
	{
		m_nStatus	= STATUS_DEAD;

		g_pMap->Monster_Create(  this	);
	}
	else
	{
		ChangeStatus(STATUS_STAY) ;
		
		if(	IsMonster()	)
		{			
			#ifdef	DEF_AZIT

				if( MAP_AZIT == GetLocationMapType() )
				{
					g_pMap->AzitNPC_Create( this, m_Tile );	// Monaster AOI俊 困摹 矫糯
				}
				else
				{
					g_pMap->Monster_Create(  this ,	m_Tile );	// Monaster AOI俊 困摹 矫糯
				}

			#else
				g_pMap->Monster_Create(  this ,	m_Tile );	// Monaster AOI俊 困摹 矫糯
			#endif
		}
		else
		{
			#ifdef	DEF_AZIT
				if( MAP_AZIT == GetLocationMapType() )
				{
					g_pMap->AzitNPC_Create( this, m_Tile );	// Monaster AOI俊 困摹 矫糯
				}
				else
				{
					g_pMap->NPC_Create( this ,	m_Tile );		// NPC甫 AOI俊 困摹 矫糯
				}

			#else
				g_pMap->NPC_Create( this ,	m_Tile );		// NPC甫 AOI俊 困摹 矫糯
			#endif
		}
	}


	//	--------------------------------------------------------------------------------
	//	SKILL且寸 Pointer且寸 Logice 荐沥 
	//
	//	-	秦寸 胶懦 沥焊 涝仿
	//	-	SKILL	涝仿矫 NPC NAME巩力肺 促矫 涝仿 矫糯 
	//	--------------------------------------------------------------------------------
	if(	m_nAttackSkill	)
	{
		m_pAttackSkill->Clear_Skill();		
		m_pAttackSkill->ReadSkill( m_nAttackSkill );

		CBeing *pThis	= this;	//	扁粮 荐摹 Backup 
		*pThis			+=	(CBeing)*m_pAttackSkill;
	}
	
	//	--------------------------------------------------------------------------------
	//	MAGIC/RARE 阁胶磐俊辑 积己瞪 ITEM殿废
	//	--------------------------------------------------------------------------------
	m_pDropItem	= new CItem;
	
	m_pDropItem->m_bPoolUse		=	true;			//	Item Pool	荤侩
	m_pDropItem->dwMagicNum		=	MAGIC_NUM;		//	MAGIC NUM
	m_pDropItem->m_nMapLayer	=	m_nMapLayer;	//	Item Layer	涝仿

	m_bPoolUse					=	false;
}


////////////////////////////////////////////////////////////////////////////////////////
//	NPC 沥焊福 檬扁拳 矫糯
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::Clear_NPC()
{
	dwMagicNum			=	MAGIC_NUM;
	
	m_dwHandle			=	0;
	m_nKillTurn			=	0;
	

	m_lpParentFD		=	NULL;
	m_pParentMonster	=	NULL;
	m_dwSummoner		=	0;

	m_bIsSendDeadPacket =	false ;

	m_bStunTurn			=	false;
	m_bSlowTurn			=	false;
	m_bHoldTurn			=	false;
	m_bNoTargetTurn		=	false;
	m_bBindTurn			=	false;
	m_nBeforeSightRange	=	0 ;

	m_bIsSpirit			=	false ;

	m_nUniqueBeforeTime	=	0;

	m_nCurseDownHP		=	0;

	m_dwAIType			=	0x00;

	m_dwQuestNewBaseID	=	0;

	memset( m_pNPCList, 0x0, sizeof( _ZP_NPCLIST_REP ) );
	memset(&m_ItemAuthority,0x0, MAX_PLAYERAUTHLIST *sizeof(CItemAuthority)) ;


	m_pQuestNPCTrigger	=	NULL;
	
	if(m_pAssistSkill)
		m_pAssistSkill->Clear_Skill();

	if(m_pOnKillSkill)
		m_pOnKillSkill->Clear_Skill();
	
	if(m_pOnAttackSkill)
		m_pOnAttackSkill->Clear_Skill();

	if(m_pTimeSkill)
		m_pTimeSkill->Clear_Skill();

	if(m_pCurseSkill)
		m_pCurseSkill->Clear_Skill();

	m_nGold				=	0 ;

	m_sFollowTile		=	10;
	m_sTeleportTile		=	18;

#ifdef	DEF_MUTATION
	m_nDropItemNum		=	0;			//	Item Drop肮荐 
#endif	


	m_dwChannelHandle	=	0;
	
#ifdef DEF_QUESTONKILLHACK
	m_dwPlayerHandleToKill = 0;		//	阁胶磐甫 磷牢 敲饭捞绢 勤甸
#endif

#ifdef DEF_AZIT
	m_dwGuildHandle		=	0;
#endif
}


////////////////////////////////////////////////////////////////////////////////////////
//	阁胶磐 积己
//
//	-	饭绢/倒楷 函捞 阁胶磐甫 1/2 犬伏肺 免泅矫糯
//	-	檬扁 阁胶磐 积己 风凭苞 烹钦矫糯

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -