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

📄 npc.h

📁 韩国英雄王座倒闭后流出来部分源代码
💻 H
字号:
////////////////////////////////////////////////////////////////////////////////////////
//	NPC 贸府 肺流 Class
//	
//
//
////////////////////////////////////////////////////////////////////////////////////////
#if !defined( _NPC_H_ )
#define _NPC_H_

#include "tgabase.h"
#include "PlayerInfo.h"
#include "Quest.h"
#include "../Parameter/player.h"						// 纳腐 荐摹 包访 Class

//	------------------------------------------------------------------------------------
//	葛电 NPC/MONSTER狼 Base Class
//	------------------------------------------------------------------------------------
#define MAXNODES						4				//	菩飘费 硅雀 傈帆 捞悼 箭磊
#define STARTPOINT						0
#define DESTINATION						3

//	------------------------------------------------------------------------------------
//	NPC 傈帆 Define
//	------------------------------------------------------------------------------------
#define STRATEGY_STAND					0				//	2004.4.25 Duke Kim眠啊
#define	STRATEGY_ROAMING				1
#define	STRATEGY_PATROL					2
#define	STRATEGY_PURSUIT				3
#define	STRATEGY_PROTECT				4
#define	STRATEGY_OCCUPATION				5
#define STRATEGY_MOVE					6				//	2004.4.25 Duke Kim眠啊

//	------------------------------------------------------------------------------------
//
//	------------------------------------------------------------------------------------	
#define	MAX_TARGETATTACK_TICK			5				//	Monster啊 傍拜矫 蝶扼啊绰 Tick
#define	MAX_PLAYERAUTHLIST				5				//	Monster甫 傍拜秦辑 酒捞袍 鼻茄阑 啊柳赤籍 府胶飘 
#define MAX_BLINDSIGHT					2				//	BLIND 矫 弥措 矫具 



//	------------------------------------------------------------------------------------
//	UNIQUE	MONSTER 颇扼固磐
//	------------------------------------------------------------------------------------
#ifdef _DEBUG

	#define UNIQUE_TIMESKILL			20	* 1000		//	UNIQUE TIME 胶懦 矫埃
	#define UNIQUE_ALIVETIME			5	* 60 * 1000	//	混酒 乐绰 矫埃
	#define UNIQUE_SPAWNTIME			30	* 60 * 1000	//	促澜 胶迄 矫埃
	#define UNIQUE_BEFORESPAWNNOTICE	4				//	蜡聪农 阁胶磐 免泅傈 皋矫瘤 (盒)

//	#define UNIQUE_TIMESKILL			20	* 1000		//	UNIQUE TIME 胶懦 矫埃
//	#define UNIQUE_ALIVETIME			3	* 60 * 1000	//	混酒 乐绰 矫埃
//	#define UNIQUE_SPAWNTIME			5	* 60 * 1000	//	促澜 胶迄 矫埃
//	#define UNIQUE_BEFORESPAWNNOTICE	4				//	蜡聪农 阁胶磐 免泅傈 皋矫瘤 (盒)
#else
	#define UNIQUE_TIMESKILL			20	* 1000		//	UNIQUE TIME 胶懦 矫埃
	#define UNIQUE_ALIVETIME			5	* 60 * 1000	//	混酒 乐绰 矫埃
	#define UNIQUE_SPAWNTIME			45	* 60 * 1000	//	促澜 胶迄 矫埃
	#define UNIQUE_BEFORESPAWNNOTICE	4				//	蜡聪农 阁胶磐 免泅傈 皋矫瘤 (盒)
#endif



#define DEF_QUESTNPC_MAX				200


//	------------------------------------------------------------------------------------
//	酒捞袍 鼻茄 
//	------------------------------------------------------------------------------------
typedef struct
{
	DWORD	dwPlayerHandle ;
	WORD	wDamage		  ;
	DWORD	dwTime		  ;
	BYTE	nPartyType	  ;
}  CItemAuthority;




////////////////////////////////////////////////////////////////////////////////////////
//	NPC Class
////////////////////////////////////////////////////////////////////////////////////////
class NPC :	public CPlayer
{
// Construction
public:
	NPC();
	NPC( _NPC_	*pNPC );

	virtual	~NPC();

// Attributes
public:

	DWORD	dwMagicNum;					//	Error Checking侩

	//	--------------------------------------------------------------------------------
	//	NPC包访 扁檬 沥焊
	//	--------------------------------------------------------------------------------
	_LPZP_NPCLIST_REP	m_pNPCList;		//	NPC LIST 馆券 Pointer 	

	DWORD	m_dwDBSEQ;					//	NPC DB Seq	(MONSTERCHART 老访 锅龋)
	DWORD	m_dwQuestNewBaseID;			//	Quest俊辑 且寸 罐篮 NPC ID

	int		m_nClassType;				//	阁胶磐 备盒 (辆幅 备盒)

	int 	m_nTurnNum;					//	NPC 悼累 Turn 锅龋 	
	int 	m_nCounterTurnNum;			//	NPC 悼累 墨款磐平 锅龋 

	int		m_nKillTurn;				//	磷菌篮饶 促矫 混府绰 措扁 矫埃
	bool	m_bIsSpirit;				//  沥飞 家券荐烙阑 眉农

	//	--------------------------------------------------------------------------------
	//	困摹 棺 捞悼 包访 VALUES
	//	--------------------------------------------------------------------------------
	_POINT	m_StartPoint;				//	矫累 困摹 Point	(Map Editor俊辑 佬篮 单捞鸥)

	_POINT	m_MoveFrom;					//	悼累 矫累 困摹	
	_POINT	m_MoveTo;					//	悼累 捞悼 困摹 

	int		m_nMaxMoveTile;				//	弥措 捞悼 鸥老

	//	--------------------------------------------------------------------------------
	//	MONSTER SKILL VALUES
	//	--------------------------------------------------------------------------------
	NPC			*m_pParentMonster;		//	家券 矫挪 阁胶磐 & 何葛

	int			m_nAttackSkill;			//	傍拜 胶懦

	CEnchant	*m_pCurseSkill;			//	历林 胶懦 
	CEnchant	*m_pAssistSkill;		//	档框 胶懦
	CEnchant	*m_pOnKillSkill;		//	惑措甫 磷牢 版快 惯悼 登绰 胶懦	
	CEnchant	*m_pOnAttackSkill;		//	傍拜 罐篮饶 惯悼 胶懦
	CEnchant	*m_pTimeSkill;			//	鸥烙 胶懦
	
	DWORD		m_dwTimeSkillTickTime;	//	TIME SKILL 拌魂侩

	DWORD		m_dwSpawnTime;			//	阁胶磐	免泅 矫埃
	DWORD		m_dwAliveTime;			//	阁胶磐	混酒 乐绰 矫埃

	DWORD		m_dwAttackTime;			//	傍拜 矫埃 (UNIQUE MONSTER俊辑 荤侩凳)
	
	int			m_nUniqueBeforeTime;	//	免泅傈 傍瘤 包访 函荐
	
	bool		m_bStunTurn;			//	胶畔 惑怕
	bool		m_bSlowTurn;			//	浇肺快	惑怕
	bool		m_bHoldTurn;			//	Hold	惑怕
	bool		m_bNoTargetTurn;		//	鸥南阑 棱瘤 给茄促.
	bool		m_bBindTurn;			//	矫具啊 良酒柳促.
	int			m_nBeforeSightRange;	//	扁粮狼 矫具甫 历厘茄促.

	//	--------------------------------------------------------------------------------
	//	傈帆 包访 函荐甸
	//	--------------------------------------------------------------------------------
	int		m_nBaseStrategy;			//	Base傈帆
	int		m_nStrategy;				//	傈帆
	
	int		m_nStepNow;					//	傈帆俊 乐绢辑狼 胶跑捞促. 0~3栏肺 官诧促.

	short	m_sFollowTile;				//	家券 阁胶磐啊 家券磊甫 蝶扼啊档废 窍绰 鸥老捞促.
	short	m_sTeleportTile;			//	家券 阁胶磐啊 家券磊甫 炮饭器飘 窍绰 鸥老捞促.

	_POINT_TILE  m_ptPoints[MAXNODES];	//	菩飘费 硅雀 傈帆俊辑 荤侩登绰 谅钎甸 菩飘费俊辑绰 醚 4 瘤痢阑 倒酒促聪哥 

	//	--------------------------------------------------------------------------------
	//	NOTENOTE: 胶瓶 规瘤 矫胶袍 眠啊 
	//	--------------------------------------------------------------------------------
	CItemAuthority m_ItemAuthority[MAX_PLAYERAUTHLIST];

	CPlayer *m_pStrategicTarget;		//	焊龋傈帆 措惑, 眠利傈帆 措惑
	CPlayer	*m_pGuardTarget;			//	烙矫规祈利牢 焊龋促.

	int		m_nLastDamage;				//	付瘤阜 涝篮 单固瘤
	int		m_nProtectTick;				//	焊龋 惑怕俊 乐阑 锭狼 鸥烙酒眶. 弊悼救 喊老 绝栏搁 焊龋磊绰 栋抄促.
	
	
	bool	m_bPoolUse;					//	按眉 荤侩咯何
	
	//	--------------------------------------------------------------------------------
	//	Magic / Rare 阁胶磐 傈侩 Drop Item
	//	--------------------------------------------------------------------------------
	CItem *m_pDropItem;
	
	//	--------------------------------------------------------------------------------
	//	NOTENOTE: 家券 阁胶磐 何葛狼 勤甸
	//	--------------------------------------------------------------------------------
	_LPSOCKET_FD	m_lpParentFD	;

	
	DWORD			m_dwAIType;			//	NPC狼 悼累 沥狼
										//	--------------------------------------------
										//	0	bit : 0 : 利措利    / 1 : 快龋利
										//	1	bit : 0 : 傍拜 啊瓷 / 1 : 傍拜阂啊
 										//	2	bit : 
										//	3	bit : 
										//	4	bit : 
										//	5	bit : 
										//	6	bit : 
										//	7	bit : 
										//	--------------------------------------------

	//	NPC QUEST Trigger 	
	CPtrList	*m_pQuestNPCTrigger;	//	QUEST侩 NPC Trigger

	int		m_iMinGold ;

	
#ifdef	DEF_MUTATION
	int		m_nDropItemNum;				//	Item Drop肮荐 
#endif

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

// Implementation
public:

	void Tick( int pTurnNum );					//	2005.01.12 Duke Kim眠啊

#ifdef DEF_AZIT
	void TickAzitSymbol( int pTurnNum );		//	Azit Symbol悼累沥狼
	void MakeMonsterAzitSymbol();				//	Azit Symbol阑 殿废矫糯

	bool IsAzitAttack( int pGuildHandle );		//	Azit 傍拜 啊瓷 咯何 犬牢
#endif

	int GetLootGold( bool pFreeUser=false );

	void MakeZoneBossMonster();
	void ImproveMultiple( double pRate, bool pWithOption = false );
	void MakeMuationMonster();

#ifdef DEF_MONSTERDROPITEM
	bool bCreateRandomItem( int & nOptionDegree, int nOptionNumber,CItem * lpItem );

	bool bCreateRareItem(CItem * lpItem,int nMinRate = 0,bool bIsRare = false);
#endif

	void SetNPCLevelEque( float pLevelRate );
	int iSetItemValue(int nValue,int nOption,int nOptionMax  ,double fValueFactor);

	void QuestNPCOptionEnchant(int pOptionID, int pOptionValue);

	bool IsAIPlayerFriendly();

	void SetAIStrategy( int pStrategy, CPlayer *pTarget=NULL);

	void Quest_Action( int pTurnNum );
	void QuestSetNPC(int pAIOption );

	int  GetClassType();
	void SetAIMortal();
	void SetAIImmortal();
	void SetAIPlayerFriendly();
	void SetAIPlayerHostile();

	void NPC_MoveTo( _POINT_TILE target );
	void NPC_Action( int pTurnNum );

#ifdef DEF_PATROLNPC
	void Patrol_Action( int pTurnNum );
#endif


bool MakeQuestMonster( 	_LPSOCKET_FD pParentSocketFD, 
						char	*pNPCName			, 
						DWORD	pAIOption			, 
						int		pOptionID[10]		, 
						int		pOptionValue[10]	, 
						int		pBaseID				, 
						int		pX					, 
						int		pY					, 
						int		pNewNPCID			,
						int		pOptionDegree		,
						int		pNearTile			,
						int		pLevelChangeRate	,
						bool	pWithOption			,
						DWORD	pChannelHandle		
					);


	void RechargeHP(int pContain);
	void UniqueMonsterOnAttack(CPlayer *pAttacker);
	void BatchEnchantTimeOut();
	void UniqueMonsterAttack();

	bool CheckDeadAttack( CPlayer *pAttacked, CEnchant *pAttackSkill = NULL );
	bool GetMultiAttackTarget( _POINT_TILE pTile, int pSearchLevel );
	bool GetMultiAttackAll( _POINT_TILE pTile, int pSearchLevel );
	bool GetMultiLineAttackAll( _POINT_TILE pTile, int pSearchLevel );
	bool GetMultiSummonFriendAll( _POINT_TILE pTile, int pSearchLevel );
	bool GetMultiNPCFriendAll( _POINT_TILE pTile, int pSearchLevel );

	void MakeUniqueSlaveMonster( NPC *pParent, int pMonsterIndex, CPlayer *pClonePlayer, int pIndex = 0 );
	
	void MakeUniqueMonster();
	void EnchantStop(CEnchant *pEnchant);
	void EnchantStart( CEnchant *pEnchant ,CPlayer *pPlayer = NULL);
	void EnchantAllStop();
	void EnchantCurseStop();
	void SkillInstansEnchantStart(CEnchant * lpSkill,CPlayer * lpAttacker = NULL);

	void UniqueMonsterTimeSkill();
	void UniqueMonsterAliveTimeOver();
	bool bPKAvailable(CPlayer * lpPlayer) ;
	bool bSummonPKAvailable(CPlayer *  lpNPC) ;
	void SummonPartyEnchantStop() ;

	void Clear_NPC();

	//	--------------------------------------------------------------------------------
	//	MONSTER咯何 魄窜 
	//		100 Under	:	Monster
	//		100			:	魄概惑	NPC
	//		101			:	汽		NPC (悼累 绝澜)
	//		102			:	芒绊	NPC
	//		103			:	辨靛	NPC
	//	--------------------------------------------------------------------------------
	bool IsMonster()
	{
		if( !m_pNPCList ) return false;

		//	NPC
		if(  m_pNPCList->wType >= 100 )	
			return false;

		return true;
	}

	//	--------------------------------------------------------------------------------
	//	NPC/MONSTER 积己 包访 Function
	//	--------------------------------------------------------------------------------
	bool SetBaseNPC( WORD pDBSEQ, bool pFirst = true );
	
	void MakeNewMonster();

	void MakeNormalMonster();
	void MakeRareMonster();
	void MakeMagicMonster();

	void MakeSlaveMonster( NPC *pNPC, int pSeq, _POINT_TILE pStartTile );
	void MakeRareSlaveMonster( NPC *pNPC, int pSeq, _POINT_TILE pStartTile );

	void MakeSummonMonster(_LPSOCKET_FD ,CPlayer * pParent, CEnchant *,_POINT_TILE, DWORD pChannelHandle=0);

#ifdef DEF_PATROLNPC
	void MakeSummonPatrolNPC(NPC * pParent, CEnchant *,_POINT_TILE, DWORD pChannelHandle=0);
#endif
	//	--------------------------------------------------------------------------------
	//	NPC 悼累
	//	--------------------------------------------------------------------------------
	void Action( int & pTurnNum );
	void MonsterAttack(int &pTurnNum);
	void SendExp() ;
	void ClearTarget()
	{
		m_pTarget		= NULL;
		m_nStatus		= STATUS_STAY;
		m_nStatusLevel	= STATLVL_CALM;	
	}
	
	bool bIsMyturn(int & pTurnNum) ;
	bool bIsUniqueAction();
	void Skill_Attack();
	void Skill_Enchant(CEnchant * lpEnchant);
	
	bool bIsPK(CPlayer * lpTarget);

	//	--------------------------------------------------------------------------------
	//	NOTENOTE: CPlayer SuddenDeath() Override
	//	--------------------------------------------------------------------------------
	void SuddenDeath() ;

	void MoveTo(CPlayer *pPlayer);
	void MoveToTarget(CPlayer *pPlayer);
	void TeleportTo(CPlayer *pPlayer);
	void MoveTo( _POINT_TILE target);
	void TeleportTo( _POINT_TILE target);

	void SetNextPatrol();

	CPlayer * SearchObject();
	CPlayer * SearchNPCTarget();
	CPlayer * SearchAllTarget();
	
	void FleeFrom(CPlayer *pPlayer);
	_POINT_TILE RandomSelectRoamingArea( _POINT_TILE center);

	//	--------------------------------------------------------------------------------
	//	胶瓶 规瘤 矫胶袍 眠啊 
	//	--------------------------------------------------------------------------------
	void SetItemAuthority(DWORD dwPlayerHandle,BYTE nPartyType = 0 ) ;
	void SetDamageForAuth(DWORD dwPlayerHandle,int iSlotIdx,DWORD dwCurrent, bool bEmptySlot = false ,BYTE nPartyType = 0 );
	void GetAuthHandle(CItem * lpItem ) ;

	bool DispatchAIMsg(CAIMsg *pMsg);
	bool Preempt( int nStatus , ENUMSTATLVL nStatLevel);

	void CurseEnchantStart(CPlayer * lpPlayer = NULL)  ;
	void CurseEnchantStop()  ;

	void PolyMorphStart(WORD & iSkill)  ;
	void PolyMorphStop(WORD & iSkill)  ;
	bool bFindTarget() ;
	
	void DeadAction();
	void NormalMove();

	void ChangeStatus(DEF_STATUS nStatus) 
	{
		m_nStatus	= nStatus;
		m_pNPCList->nStatus1 = nStatus ;
	}


	_LPZP_NPCLIST_REP GetNPCList();
};

#endif

⌨️ 快捷键说明

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