?? npc.h
字號:
////////////////////////////////////////////////////////////////////////////////////////
// NPC 貿(mào)府 肺流 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 // 菩飄費(fèi) 硅雀 傈帆 撈悼 箭磊
#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 // 蠟聰農(nóng) 閣膠磐 免泅傈 皋矯瘤 (盒)
// #define UNIQUE_TIMESKILL 20 * 1000 // UNIQUE TIME 膠懦 矯埃
// #define UNIQUE_ALIVETIME 3 * 60 * 1000 // 混酒 樂綽 矯埃
// #define UNIQUE_SPAWNTIME 5 * 60 * 1000 // 促瀾 膠迄 矯埃
// #define UNIQUE_BEFORESPAWNNOTICE 4 // 蠟聰農(nóng) 閣膠磐 免泅傈 皋矯瘤 (盒)
#else
#define UNIQUE_TIMESKILL 20 * 1000 // UNIQUE TIME 膠懦 矯埃
#define UNIQUE_ALIVETIME 5 * 60 * 1000 // 混酒 樂綽 矯埃
#define UNIQUE_SPAWNTIME 45 * 60 * 1000 // 促瀾 膠迄 矯埃
#define UNIQUE_BEFORESPAWNNOTICE 4 // 蠟聰農(nóng) 閣膠磐 免泅傈 皋矯瘤 (盒)
#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; // 瀝飛 家券薦烙闌 眉農(nóng)
// --------------------------------------------------------------------------------
// 困摹 棺 撈悼 包訪 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]; // 菩飄費(fèi) 硅雀 傈帆俊輯 葷儈登綽 諒釬甸 菩飄費(fèi)俊輯綽 醚 4 瘤痢闌 倒酒促聰哥
// --------------------------------------------------------------------------------
// NOTENOTE: 膠瓶 規(guī)瘤 矯膠袍 眠啊
// --------------------------------------------------------------------------------
CItemAuthority m_ItemAuthority[MAX_PLAYERAUTHLIST];
CPlayer *m_pStrategicTarget; // 焊齲傈帆 措惑, 眠利傈帆 措惑
CPlayer *m_pGuardTarget; // 烙矯規(guī)祈利牢 焊齲促.
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);
// --------------------------------------------------------------------------------
// 膠瓶 規(guī)瘤 矯膠袍 眠啊
// --------------------------------------------------------------------------------
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -