📄 role.h
字号:
#ifndef _ROLE_H
#define _ROLE_H
#include "basefunc.h"
#include "Path.h"
#include "MapObj.h"
#include "IRoleView.h"
#include "AniEffect.h"
#include "SayHello.h"
#include "FloatingStr.h"
#include "Game3DEffectEx.h"
#include "ZoomNum.h"
#include <vector>
const int _MAX_LEVEL =100;
//----------------------------------------------------------------------------
// ID空间
enum{
_PLAYER_ID_NONE = 0,
_PLAYER_ID_MONSTER = 1,
_PLAYER_ID_PET = 2,
_PLAYER_ID_SYSNPC = 3,
_PLAYER_ID_DYNNPC = 4,
_PLAYER_ID_CALLPET = 5,
_PLAYER_ID_PLAYER = 6,
};
// ID空间
/////////////////////////////////////////////////////////////////////
// ID空间
const OBJID SCENEID_FIRST = 000001; // SCENE的第一个ID
const OBJID SYSNPCID_FIRST = 00001; // SYSNPC的第一个ID
const OBJID SYSNPCID_LAST = 99999; // SYSNPC的最后一个ID
const OBJID DYNANPCID_FIRST = 100001; // DYNANPC的第一个ID
const OBJID DYNANPCID_LAST = 199999; // DYNANPC的最后一个ID
const OBJID SCENEID_LAST = 299999; // SCENE的最后一个ID
const OBJID NPCSERVERID_FIRST = 400001; // NPC的第一个ID
const OBJID MONSTERID_FIRST = 400001; // MONSTER的第一个ID
const OBJID MONSTERID_LAST = 499999; // MONSTER的最后一个ID
const OBJID PETID_FIRST = 500001; // PET的第一个ID
const OBJID PETID_LAST = 599999; // PET的最后一个ID
const OBJID NPCSERVERID_LAST = 899999; // NPC的最后一个ID
const OBJID TRAPID_FIRST = 900001; // 魔法陷阱的第一个ID
const OBJID MAGICTRAPID_FIRST = 900001; // 玩家魔法的第一个ID
const OBJID MAGICTRAPID_LAST = 989999; // 玩家魔法的最后一个ID
const OBJID SYSTRAPID_FIRST = 990001; // 系统陷阱的第一个ID
const OBJID SYSTRAPID_LAST = 999999; // 系统陷阱的最后一个ID
const OBJID TRAPID_LAST = 999999; // 魔法陷阱的最后一个ID
const OBJID PLAYER_ID_FIRST = 1000000; // Player的第一个ID
const OBJID PLAYER_ID_LAST = 1999999999; // Player的最后一个ID
const OBJID CALLPETID_FIRST = 2000000000; // CALLPET的第一个ID
const OBJID CALLPETID_LAST = 3999999999; // CALLPET的最后一个ID
const OBJID CLIENT_ID_FIRST = 4000000000; // 为客户端保留的ID空间
const OBJID MOUSE_PLAYER_ID = 4000000001; // 放NPC时在鼠标上显示
const OBJID _IDMAX_NPC =999999;
//----------------------------------------------------------------------------
// 功能类型
enum
{
ROLE_ATTRIBUTE_TASK = 1, // 任务类
ROLE_ATTRIBUTE_RECYCLE = 2, // 可回收类
ROLE_ATTRIBUTE_SCENE = 4, // 场景类
};
//----------------------------------------------------------------------------
// 行为类型
enum{
_ROLE_NPC_NONE = 0, // 非法NPC
_ROLE_SHOPKEEPER_NPC = 1, // 商店NPC
_ROLE_TASK_NPC = 2, // 任务NPC
_ROLE_STORAGE_NPC = 3, // 寄存处NPC
_ROLE_TRUNCK_NPC = 4, // 箱子NPC
_ROLE_FACE_NPC = 5, // 变头像NPC
_ROLE_FORGE_NPC = 6, // 锻造NPC
_ROLE_EMBED_NPC = 7, // 镶嵌NPC
_ROLE_STATUARY_NPC = 9, // 雕像NPC
_ROLE_SYNFLAG_NPC = 10, // 帮派标记NPC
_ROLE_PLAYER = 11, // 其他玩家
_ROLE_HERO = 12, // 自己
_ROLE_MONSTER = 13, // 怪物
_ROLE_BOOTH_NPC = 14, // 摊位NPC
_SYNTRANS_NPC = 15, // 帮派传送NPC(用于00:00收费)(LINKID为固定NPC的ID,与其它使用LINKID的互斥)
_ROLE_BOOTH_FLAG_NPC = 16, // 摊位标志NPC
_ROLE_MOUSE_NPC = 17, // 鼠标上的NPC
_ROLE_MAGICITEM = 18, // 陷阱火墙
_ROLE_DICE_NPC = 19, // 骰子NPC
_ROLE_WEAPONGOAL_NPC = 21, // 近身攻击NPC
_ROLE_MAGICGOAL_NPC = 22, // 魔法攻击靶子NPC
_ROLE_BOWGOAL_NPC = 23, // 弓箭靶子NPC
_ROLE_TARGET_NPC = 24, // 挨打,不触发任务
_ROLE_FURNITURE_NPC = 25, // 家具NPC
_ROLE_CITY_GATE_NPC = 26, // 城门NPC
_ROLE_NEIGHBOR_DOOR = 27, // 邻居的门
_ROLE_CALL_PET = 28, // 召唤兽
_TRAINPLACE_NPC = 29, // 幻兽驯养所
_AUCTION_NPC = 30, // 拍卖NPC
// _ROLE_WOOD_NPC = 30, // 木头矿
_ROLE_STONE_MINE = 31, // 石头矿
// _ROLE_METAL_MINE = 32, // 金属矿
_ROLE_PKGAME_NPC = 32, // PK比赛用NPC
_ROLE_3DFURNITURE_NPC = 101, // 3D家具NPC
_ROLE_CITY_WALL_NPC = 102, // 城墙NPC
_ROLE_CITY_MOAT_NPC = 103, // 护城河NPC
SYN_NPC_WARLETTER = 110, //增加新的NPC类型 专门用来 下战书的 帮派NPC
};
//----------------------------------------------------------------------------
// 视图类型
enum{
_ROLE_VIEW_NONE = 0,
_ROLE_VIEW_ROLE = 1,
_ROLE_VIEW_STATUARY = 2,
_ROLE_VIEW_TARGET = 3,
_ROLE_VIEW_TASKNPC = 4,
_ROLE_VIEW_SYNSTONE = 5,
_ROLE_VIEW_BOOTH = 6,
_ROLE_VIEW_MAPMAGICOBJ = 7,
_ROLE_VIEW_DICENPC = 8,
_ROLE_VIEW_TERRAIN = 9,
};
//----------------------------------------------------------------------------
// command define
const int _COMMAND_NULL =0;
const int _COMMAND_STOP =1;
const int _COMMAND_STANDBY =2;
const int _COMMAND_WALK =3;
const int _COMMAND_RUN =4;
const int _COMMAND_JUMP =5;
const int _COMMAND_EMOTION =6;
const int _COMMAND_ACTION =7;
const int _COMMAND_ATTACK =8;
const int _COMMAND_FOLLOW =9;
const int _COMMAND_SHITHAPPEN =10;
const int _COMMAND_DIE =11;
const int _COMMAND_SPATTACK =12;
const int _COMMAND_FAINT =13;
const int _COMMAND_RUSHATK =14;
const int _COMMAND_WOUND =15;
const int _COMMAND_DEFEND =16;
const int _COMMAND_WALKFORWARD =17;
const int _COMMAND_RUNFORWARD =18;
const int _COMMAND_LOCKATK =19;
const int _COMMAND_PICKUP =20;
const int _COMMAND_TEAMFOLLOW =21;
const int _COMMAND_POSE =22;
const int _COMMAND_INTONE =23;
const int _COMMAND_BUMP =24;
const int _COMMAND_MINE =25;
const int _COMMAND_SHOOT =26;
const int _COMMAND_LOCKBOOTH =27;
const int _COMMAND_TAKEOFF =28;
const int _COMMAND_LANDING =29;
const int _COMMAND_FLOAT =30;
const int _COMMAND_FLOAT_DIE =31;
const int _COMMAND_CHARGEUP =32;
const int _CPMMAND_CHARGEUP_SHOOT =33;
const int _COMMAND_KONGFU =100;
// command status define
const int _CMDSTATUS_BEGIN =0;
const int _CMDSTATUS_DEPART =1;
const int _CMDSTATUS_PROGRESS =2;
const int _CMDSTATUS_CONTINUE =3;
const int _CMDSTATUS_WAITING =4;
const int _CMDSTATUS_ACCOMPLISH =9;
// user status
const __int64 USERSTATUS_NORMAL =0x00000000; // 无特殊状态
const __int64 USERSTATUS_TEAMLEADER =0x00000001; // 队长
const __int64 USERSTATUS_DIE =0x00000002; // 死亡
const __int64 USERSTATUS_GHOST =0x00000004; // 灵魂状态
const __int64 USERSTATUS_DISAPPEARING =0x00000008; // 尸体消失状态
const __int64 USERSTATUS_CRIME =0x00000010; // 犯罪 // 闪蓝色
const __int64 USERSTATUS_RED =0x00000020; // 红名
const __int64 USERSTATUS_DARKRED =0x00000040; // 黑名
const __int64 USERSTATUS_SYNCRIME =0x00000080; // 帮派犯罪
const __int64 USERSTATUS_POISON =0x00000100; // 中毒
const __int64 USERSTATUS_INVISIBLE =0x00000200; // 隐身
const __int64 USERSTATUS_CANNOTMOVE =0x00000400; // 冰冻
const __int64 USERSTATUS_LURKER =0x00001000; // 潜伏
const __int64 USERSTATUS_DEFENCE1 =0x00002000; // 防御提高1
const __int64 USERSTATUS_DEFENCE2 =0x00004000; // 防御提高2
const __int64 USERSTATUS_DEFENCE3 =0x00008000; // 防御提高3
const __int64 USERSTATUS_ATTACK =0x00010000; // 攻击提升
const __int64 USERSTATUS_ATKSPEED =0x00020000; // 攻击速度提高
const __int64 USERSTATUS_MAGICDAMAGE =0x00040000; // 魔法伤害提高
const __int64 USERSTATUS_MAGICDEFENCE =0x00080000; // 魔法防御提高
const __int64 USERSTATUS_REFLECT =0x00100000; // 攻击反射
const __int64 USERSTATUS_REFLECTMAGIC =0x00200000; // 魔法反射
const __int64 USERSTATUS_SLOWDOWN1 =0x00400000; // 减速状态 50%
const __int64 USERSTATUS_SLOWDOWN2 =0x00800000; // 减速状态 // 血少于一半时开始减速 // 50%
const __int64 USERSTATUS_TEAM_HEALTH =0x01000000; // 医疗结界状态
const __int64 USERSTATUS_TEAM_ATTACK =0x02000000; // 攻击结界状态
const __int64 USERSTATUS_TEAM_DEFENCE =0x04000000; // 护体结界状态
const __int64 USERSTATUS_TEAM_SPEED =0x08000000; // 速度结界状态
const __int64 USERSTATUS_TEAM_EXP =0x10000000; // 修炼结界状态
const __int64 USERSTATUS_TEAM_SPIRIT =0x20000000; // 心灵结界状态
const __int64 USERSTATUS_TEAM_CLEAN =0x40000000; // 净化结界状态
const __int64 USERSTATUS_SMOKE =0x80000000; // 烟雾效果
const __int64 USERSTATUS_DARKNESS =0x0000000100000000; // 黑暗效果
const __int64 USERSTATUS_PALSY =0x0000000200000000; // 麻痹效果
const __int64 USERSTATUS_MAXLIFE =0x0000000400000000; // 最大生命增加/减少
const __int64 USERSTATUS_MAXENERGY =0x0000000800000000; // 最大体力增加/减少
const __int64 USERSTATUS_ADD_EXP =0x0000001000000000; // 战斗经验增加
const __int64 USERSTATUS_ATTRACT_MONSTER =0x0000002000000000; // 吸引怪物
const __int64 USERSTATUS_XPFULL =0x0000004000000000; // XP满
const __int64 USERSTATUS_ADJUST_DODGE =0x0000008000000000; // 调节总的躲避值
const __int64 USERSTATUS_ADJUST_XP =0x0000010000000000; // 调节每次增加XP值
const __int64 USERSTATUS_ADJUST_DROPMONEY =0x0000020000000000; // 调节怪物每次掉钱
const __int64 USERSTATUS_PK_PROTECT =0x0000040000000000; // PK保护
const __int64 USERSTATUS_PELT =0x0000080000000000; // 疾行状态
//新增加
const __int64 USERSTATUS_ADJUST_EXP =0x0000100000000000; // 战斗获得经验调整
const __int64 USERSTATUS_HEAL =0x0000200000000000; // 治愈状态
const __int64 USERSTATUS_FAINT =0x0000400000000000; // 晕
const __int64 USERSTATUS_TRUCULENCE =0x0000800000000000; // 野蛮
const __int64 USERSTATUS_DAMAGE =0x0001000000000000; // 调整受到的伤害
const __int64 USERSTATUS_ATKER_DAMAGE =0x0002000000000000; // 调整对目标造成的伤害
const __int64 USERSTATUS_CONFUSION =0x0004000000000000; // 混乱
const __int64 USERSTATUS_FRENZY =0x0008000000000000; // 狂暴
const __int64 USERSTATUS_EXTRA_POWER =0x0010000000000000; // 神力
const __int64 USERSTATUS_TRANSFER_SHIELD =0x0020000000000000; // 护盾
const __int64 USERSTATUS_SORB_REFLECT =0x0040000000000000; // 吸收反射
const __int64 USERSTATUS_FRENZY2 =0X0080000000000000; // 另一种狂暴状态
enum {ANIEFFECT_NORMAL=0, ANIEFFECT_CASTMAGIC=1, ANIEFFECT_BLASTMAGIC=2};
enum {ROLE_PLAYER = 0, ROLE_MONSTER = 1};
enum {SEX_NONE = 0, SEX_MALE, SEX_FEMALE, SEX_ASEXUAL, SEX_ALL};
enum
{
RACE_NONE = 0, // 未知
RACE_HUMAN = 2, // 人类
RACE_SPRITE = 3, // 精灵
RACE_DARKSPRITE = 1, // 暗精灵
};
enum{
PROFESSIONAL_ENCHANTER = 10, // 法师
PROFESSIONAL_WARRIOR = 20, // 战士
PROFESSIONAL_KORADJI = 30, // 异能者
};
// others
const int OFFSET_NAMESHOW = 120;
const int OFFSET_SYNDICATESHOW = 102;
const DWORD TIME_INBATTLE =10000;
// type define
class C3DObj;
class C3DMotion;
class C3DRoleData;
typedef struct
{
OBJID idPlayer;
DWORD dwSenderCommandIndex;
int nAction;
int nFrameIndex;
int nLife;
DWORD dwColor;
}BeAttackCmdInfo;
class CCommand {
public:
int iType;
int iStatus;
union {
char szCmd[256];
struct {
OBJID idTarget;
CMyPos posTarget;
int nTargetZ;
int nDir;
char szString[_MAX_NAMESIZE];
DWORD dwData;
int nData;
BOOL bData;
BOOL bHeroSendMsg;
char szString0[_MAX_STRING];
char szString1[_MAX_STRING];
int nFrameStart;
int nFrameEnd;
int nFrameInterval;
BOOL bAddUp;
DWORD dwIndex;
};
};
void Format(const char* fmt, ...) { vsprintf( szCmd, fmt, (char*) ((&fmt)+1) ); }
CCommand(void) {memset(this, 0L, sizeof(CCommand)); bHeroSendMsg = true;
strcpy(szString0, ""); strcpy(szString1, ""); bAddUp = false;}
};
class CPath;
typedef struct{
OBJID id;
OBJID idMonsterType;
USHORT usLook, usHair, usFace, usPose;
UCHAR ucSprite;
OBJID idArmorType, idRWeaponType, idLWeaponType, idMountType, idArmetType, idMantleType;
char szName[_MAX_NAMESIZE];
int iSize, iAddSize, nSex, nTransformLook, nRace;
int iDirection, iAngle;
int iZoomPercent;
CMyPos posRush;
CMyPos posMap, posWorld, posScr,posNext;
CMyPos posActionBegin, posActionEnd; // world pos
int nPosActionBeginZ, nPosActionEndZ;
int nZ;
CMyPos posDir;
int iActType;
int iActFrameIndex;
int iActFrameAmount;
DWORD timeFirstFrame;
DWORD timeFrameInterval;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -