📄 npc.h
字号:
// 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 + -