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

📄 npc.h

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 H
📖 第 1 页 / 共 2 页
字号:
// Npc.h: interface for the CNpc class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_NPC_H__600048EF_818F_40E9_AC07_0681F5D27D32__INCLUDED_)
#define AFX_NPC_H__600048EF_818F_40E9_AC07_0681F5D27D32__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "COM.h"
#include "Map.h"

#include "Packet.h"
#include "PathFind.h"
#include "Store.h"
#include "GuildFortress.h"
#include "EventItemNew.h"

#define CHANGE_PATH_STEP	2
#define CHANGE_PATH_RANGE	2
#define RANDOM_MOVE_LENGTH	10
#define	NPC_ITEM_BAND		2000

#define NPCTYPE_MONSTER		0
#define NPCTYPE_NPC			1
#define NPCTYPE_DOOR		2
#define NPCTYPE_GUARD		3			// 嘿冠捞屈 版厚捍
#define MPCTYPE_GUARD_MOVE	4			// 倒酒促聪绰 版厚捍
#define NPCTYPE_GUILD_NPC	5			// 老馆 鞘靛俊辑 拱扒阑 芭贰窍绰 NPC 
#define NPCTYPE_GUILD_GUARD	6			// 老馆 鞘靛俊辑 惑痢林函阑 焊龋窍绰 版厚捍
#define NPCTYPE_GUILD_MARK	7			// 阿 辨靛窍快胶俊 乐绰 辨靛付农 NPC
#define NPCTYPE_GUILD_DOOR	8			// 傍己傈俊辑 静捞绰 巩

#define GUILD_REPAIR_NPC_BAND	20000	// 颊惑登绢 荐府啊 鞘夸茄 NPC
#define GUILD_FORTRESS_NPC_BAND	25000	// 己阑 痢飞窍绰单 鞘夸茄 NPC

#define MAX_MAP_SIZE		10000		//@@@@@@@@@@@@@@@@@@@@@@@@@@@22
#define MAX_PATH_SIZE		100

#define NPC_ITEM_NUM		5

#define NPC_ATTACK_SHOUT	0
#define NPC_SUBTYPE_LONG_MON 1

#define NPC_TRACING_STEP	100

#define NPC_HAVE_USER_LIST	10

#define NPC_QUEST_MOP		 10000		// 涅胶飘侩 各( 1 ~ 10000 )栏肺 荤侩 
#define NPC_EVENT_MOP		 31000		// 捞亥飘 各 锅龋
#define NPC_EVENT_GREATE_MOP 30000		// 漂 捞亥飘 阁胶磐 锅龋
#define NPC_MAGIC_ITEM		 1500	// 1~10000锅阑 扁霖
#define NPC_RARE_ITEM		 1720  //
#define NPC_EVENT_CHANCE	40			// 捞亥飘 各老版快 概流犬伏苞 饭绢 犬伏匡 棵妨霖促. X 40 

/*
#define NPC_EVENT_MOON		620			// 焊抚崔 靛酚犬啦
#define NPC_EVENT_SONGPEON	920			// 价祈/岿捍 靛肺犬啦
#define NPC_EVENT_BOX		1420		// 急拱惑磊 靛酚犬啦

#define EVENTITEM_SID_MOON			862	// 焊抚崔	Sid
#define EVENTITEM_SID_SONGPEON_01	863	// 价祈		Sid
#define EVENTITEM_SID_SONGPEON_11	864	//
#define EVENTITEM_SID_SONGPEON_31	865	//
#define EVENTITEM_SID_SONGPEON_51	866	//
#define EVENTITEM_SID_SONGPEON_71	867	//
#define EVENTITEM_SID_BOX			868 // 急拱惑磊 Sid
*/

// 眠籍 捞亥飘甫 农府胶付胶 捞亥飘肺 函屈窍咯 柳青窍扁 困秦 犁沥狼 窃
#define NPC_EVENT_MOON		620			// 魂鸥牢屈靛酚犬啦 5%
#define NPC_EVENT_SONGPEON	1120		// 阜措荤帕 靛肺犬啦 5%
#define NPC_EVENT_BOX		1420		// 农府胶付胶 剧富 靛酚犬啦 3%

#define EVENTITEM_SID_MOON			873	// 魂鸥牢屈	Sid
#define EVENTITEM_SID_SONGPEON_01	872	// 阜措荤帕	Sid
#define EVENTITEM_SID_SONGPEON_11	864	//
#define EVENTITEM_SID_SONGPEON_31	865	//
#define EVENTITEM_SID_SONGPEON_51	866	//
#define EVENTITEM_SID_SONGPEON_71	867	//
#define EVENTITEM_SID_BOX			871 // 农府胶付胶 剧富 Sid

#define NPC_GUILDHOUSE_BAND	10000		// 辨靛窍快胶俊 包访等 NPC
//#define NPC_STORE_BAND			
#define FORTRESS_BAND	1000			// 夸货俊 加窍绰 NPC

#define NPC_EVENT_B_ITEM	57			// 裹侩雀汗力B 捞亥飘甫 困茄 烙矫 沥狼
#define NPC_EVENT_ITEM		634			// 捞亥飘甫 困茄 烙矫 沥狼
#define NPC_EVENT_INIT_STAT	756			// 必距 酒捞袍
#define NPC_EVENT_FLOWER	773			// 各捞 冻绢哆府绰 采官备聪 背券鼻
#define NPC_EVENT_LOTTO		796			// 捧胶墨聪 捞亥飘

// 傍己傈俊 静烙
										// 辨靛傈矫 荐府且 鞘夸己 捞 乐栏搁
#define NPC_NON_REPAIR_STATE	0		// 0 : 弥绊 惑怕		
#define NPC_NEED_REPAIR_STATE	1		// 1 : 颊惑登绢 荐府 且 鞘夸啊 乐绰 惑怕
#define NPC_DEAD_REPAIR_STATE	2		// 2 : 肯傈洒 噶啊柳 惑怕

#define NPC_NCIRCLE_DEF_STATE	1
#define NPC_NCIRCLE_ATT_STATE	2

struct  DynamicMapList
{
	POINT map[NPC_MAP_SIZE];
};

struct  NpcSkillList
{
	short	sSid;
	BYTE	tLevel;
	BYTE	tOnOff;
};

struct	ExpUserList
{
	TCHAR	strUserID[CHAR_NAME_LENGTH + 1];			// 酒捞叼(某腐磐 捞抚)
	int		iUid;		
	int		nDamage;								// 鸥拜摹 钦
	BOOL	bIs;
};

struct	TargetUser
{
	int		iUid;
	int		sHP;
	int		sMaxHP;
};

struct ItemUserRightlist
{
	short uid;
	int nDamage;
};

//typedef CTypedPtrArray <CPtrArray, ExpUserList*>		arUserList;
typedef CArray <CPoint, CPoint> RandMoveArray;		// 8规氢 RandomMove窍扁 困茄 Array

class CNpc  
{
public:
	CNpc();
	virtual ~CNpc();

	BOOL SetLive(COM* pCom);
	BOOL FindEnemy(COM* pCom);
	BOOL GetTargetPath(COM* pCom);
	BOOL IsCloseTarget(COM* pCom, int nRange = 1);
	BOOL IsCloseTarget(USER *pUser, int nRange = 1);
	BOOL IsMovingEnd();
	BOOL IsChangePath(COM* pCom, int nStep = CHANGE_PATH_STEP);
	USER* GetUser(COM* pCom, int uid);
	BOOL ResetPath(COM* pCom);
	BOOL GetTargetPos(COM* pCom, CPoint& pt);
	BOOL StepMove(COM* pCom, int nStep);
	BOOL GetLastPoint(int sx, int sy, int& ex, int& ey);

protected:
	void ClearPathFindData(void);
	void InitSkill();
	
public:	
	void SendNpcInfoBySummon(COM* pCom);
	BOOL CheckUserForNpc_Live(int x, int y);
	DWORD GetItemThrowTime();
	void UserListSort();
	CPoint FindNearRandomPointForItem(int x, int y);
	BOOL UpdateEventItemNewRemain(CEventItemNew* pEventItem);
	void GiveItemToMap(COM* pCom, ItemList* pItem);
	void GiveEventItemNewToUser(USER* pUser);
	void SetISerialToItem(ItemList *pItem, int iEventItemSid);
	int AreaAttack(COM* pCom);
	void GetWideRangeAttack(COM* pCom, int x, int y, int damage, int except_uid);
	int PsiAttack(COM* pCom);
	void TestCode(COM *pCom, USER *pUser);
	void SendFortressInsight(COM *pCom, TCHAR *pBuf, int nLength);
	void SetMapAfterGuildWar();
	void SetMapTypeBeforeGuildWar(COM *pCom);
	void SendFortressNCircleColor(COM *pCom);
	//void SetDoorDamagedInFortressWar(int nDamage, TCHAR *id, int uuid, COM *pCom);
	void SetDoorDamagedInFortressWar(int nDamage, USER *pUser);
	//void SetDamagedInFortressWar(int nDamage, TCHAR *id, int uuid, COM *pCom);
	void SetDamagedInFortressWar(int nDamage, USER *pUser);
	void SetFortressState();
	BOOL UpdateEventItem(int sid);
	int GetEventItemNum(COM *pCom);
	void GiveEventItemToUser(USER *pUser);
	void Send(USER* pUser, TCHAR* pBuf, int nLength);
	int GetCityNumForVirtualRoom(int zone);
	//void SetDamagedInGuildWar(int nDamage, TCHAR *id, int uuid, COM *pCom);
	void SetDamagedInGuildWar(int nDamage, USER *pUser);
	void SetGuildType(COM *pCom);
	void EventNpcInit(int x, int y);
	int IsMagicItem(COM* pCom, ItemList *pItem, int iTable);
	int IsTransformedItem(int sid);
	void ToTargetMove(COM* pCom, USER* pUser);
	void NpcTrace(TCHAR* pMsg);
	CPoint ConvertToServer(int x, int y);
	void Init();
	BOOL IsStepEnd();
	BOOL PathFind(CPoint start, CPoint end);
	void InitTarget(void);
	void SendToRange(COM* pCom, char* temp_send, int index, int min_x, int min_y, int max_x, int max_y);
	CPoint ConvertToClient(int x, int y);
	void FillNpcInfo(char* temp_send, int& index, BYTE flag);
	void SendUserInfoBySightChange(int dir_x, int dir_y, int prex, int prey, COM* pCom);
	int GetFinalDamage(USER* pUser, int type = 1);
	void DeleteNPC();
	void SetFireDamage();
	BOOL CheckClassItem(int artable, int armagic);
	void ChangeSpeed(COM *pCom, int delayTime);
	CNpc* GetNpc(int nid);
	void InitUserList();
	BOOL GetBackPoint(int &x, int &y);
	void GetBackDirection(int sx, int sy, int ex, int ey);
	void NpcBack(COM *pCom);
	BOOL IsDamagedUserList(USER *pUser);
	void FindFriend();
	void NpcStrategy(BYTE type);
	void NpcTypeParser();
	void NpcFighting(COM *pCom);
	void NpcTracing(COM *pCom);
	void NpcAttacking(COM *pCom);
	void NpcMoving(COM *pCom);
	void NpcStanding(COM *pCom);
	void NpcLive(COM *pCom);
	void ChangeTarget(USER *pUser, COM* pCom);
	BOOL IsSurround(int targetx, int targety);
	BOOL CheckNpcRegenCount();
	void IsUserInSight(COM *pCom);
	void SendExpToUserList(COM *pCom);
	BOOL SetDamage(int nDamage, int uid, COM *pCom);
	void SetColdDamage(void);
	CPoint FindNearRandomPoint(int xpos, int ypos);
	BOOL IsMovable(int x, int y);
	void GiveNpcHaveItem(COM *pCom);
	int GetCriticalInitDamage(BOOL* bSuccessSkill);
	int GetNormalInitDamage();
	void SendAttackMiss(COM* pCom, int tuid);
	void IsSkillSuccess(BOOL *bSuccess);
	BYTE GetWeaponClass();
	//yskang 0.3 void SendAttackSuccess(COM *pCom, int tuid, CByteArray &arAction1, CByteArray &arAction2, short sHP, short sMaxHP);
	void SendAttackSuccess(COM *pCom, int tuid,BOOL bIsCritical, short sHP, short sMaxHP);//yskang 0.3
	void GiveItemToMap(COM *pCom, int iItemNum, BOOL bItem, int iEventNum = 0);
	BOOL GetDistance(int xpos, int ypos, int dist);
	void SendInsight(COM* pCom, TCHAR *pBuf, int nLength);
	void SendExactScreen(COM* pCom, TCHAR* pBuf, int nLength);

	void SightRecalc(COM* pCom);

	BOOL IsInRange();
	BOOL RandomMove(COM* pCom);

⌨️ 快捷键说明

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