📄 npc.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 + -