📄 i_role.h
字号:
// RoleManager.h: interface for the CRoleManager class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(I_ROLE_HEADER)
#define I_ROLE_HEADER
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <math.h>
#include "define.h"
#include "GameObjSet.h"
#include "TimeOut.h"
enum { POSE_STAND=0, };
const int ADJUST_PERCENT = 30000; // ADJUST时,>=30000 表示百分数
const int ADJUST_SET = -30000; // ADJUST时,<=-30000 表示等于(-1*num - 30000)
const int ADJUST_FULL = -32768; // ADJUST时,== -32768 表示填满
const int DEFAULT_DEFENCE2 = 10000; // 数据库缺省值
//帮派等级需要的人数的最低限度
const int SYNMEMSUM_LOWERLIMIT_TWO = 60;
const int SYNMEMSUM_LOWERLIMIT_THREE = 150;
const int SYNMEMSUM_LOWERLIMIT_FOUR = 380;
//帮派级别
const int SYNRANK_FOUR = 4;
const int SYNRANK_THREE = 3;
const int SYNRANK_TWO = 2;
const int SYNRANK_ONE = 1;
const DWORD TIME_FOOTPRINT = 1000;
const int TEAM_STATUS_REQ_ROLES = 3; // 结界状态生效需要的最少组队人数
const int MAX_FRENZY_LIFE_PERCENT = 70; // 生命超过这个百分比就会取消狂暴状态
///////////////////////////////////////
// 修改魔法系统需要的
const int ARROW_FLY_ALT = 60; // 箭支飞行高度
//---帮派---begin
//////////////////////////////////////////////////////////////////////
enum {
RANK_LEADER = 100, //军团团长
RANK_SUBLEADER = 80, //分团长
RANK_TEAMLEADER = 60, //队长
RANK_NEWBIE = 20, //普通团员
RANK_RESERVED = 10, //预备团员
RANK_NONE = 0,
RANK_SUB = RANK_LEADER - RANK_SUBLEADER,
// RANK_PRE = -1,//RANK_SUBLEADER - RANK_PRESUBLEADER,
// RANK_TEAM = RANK_SUBLEADER - RANK_TEAMLEADER,
};
enum
{
SYNMEM_LEVEL_ONE = 1,
SYNMEM_LEVEL_TWO = 2,
SYNMEM_LEVEL_THREE = 3,
SYNMEM_LEVEL_FOUR = 4,
SYNMEM_LEVEL_FIVE = 5,
};
//---帮派---end
//////////////////////////////////////////////////////////////////////
enum
{
DIE_NORMAL = 1,
DIE_CRITICALHIT = 2,
DIE_MAGIC = 3,
DIE_FLOAT = 4, // only for client
DIE_ARROWSHOOT = 5,
};
//////////////////////////////////////////////////////////////////////
enum { OWNER_NONE, OWNER_USER, OWNER_SYN, OWNER_NPC };
//////////////////////////////////////////////////////////////////////
// 外部状态,需要通过MsgPlayer通知其它玩家的状态。与客户端同步
const I64 KEEPEFFECT_NORMAL =0x00000000; // 无特殊状态
const I64 KEEPEFFECT_TEAMLEADER =0x00000001; // 队长
const I64 KEEPEFFECT_DIE =0x00000002; // 死亡
const I64 KEEPEFFECT_GHOST =0x00000004; // 灵魂状态
const I64 KEEPEFFECT_DISAPPEARING =0x00000008; // 尸体消失状态
const I64 KEEPEFFECT_CRIME =0x00000010; // 犯罪 // 闪蓝色
const I64 KEEPEFFECT_RED =0x00000020; // 红名
const I64 KEEPEFFECT_DEEPRED =0x00000040; // 黑名
const I64 KEEPEFFECT_SYNCRIME =0x00000080; // 帮派犯罪
const I64 KEEPEFFECT_POISON =0x00000100; // 中毒
const I64 KEEPEFFECT_HIDDEN =0x00000200; // 隐身
const I64 KEEPEFFECT_FREEZE =0x00000400; // 冰冻
const I64 KEEPEFFECT_SUPERSOLDIER =0x00000800; // 无双
const I64 KEEPEFFECT_LURKER =0x00001000; // 潜伏
const I64 KEEPEFFECT_DEFENCE1 =0x00002000; // 防御提高1
const I64 KEEPEFFECT_DEFENCE2 =0x00004000; // 防御提高2
const I64 KEEPEFFECT_DEFENCE3 =0x00008000; // 防御提高3
const I64 KEEPEFFECT_ATTACK =0x00010000; // 攻击提升
const I64 KEEPEFFECT_ATKSPEED =0x00020000; // 攻击速度提高
const I64 KEEPEFFECT_MAGICDAMAGE =0x00040000; // 魔法伤害提高
const I64 KEEPEFFECT_MAGICDEFENCE =0x00080000; // 魔法防御提高
const I64 KEEPEFFECT_REFLECT =0x00100000; // 攻击反射
const I64 KEEPEFFECT_REFLECTMAGIC =0x00200000; // 魔法反射
const I64 KEEPEFFECT_SLOWDOWN1 =0x00400000; // 减速状态 50%
const I64 KEEPEFFECT_SLOWDOWN2 =0x00800000; // 减速状态 // 血少于一半时开始减速 // 50%
const I64 KEEPEFFECT_TEAM_HEALTH =0x01000000; // 医疗结界状态
const I64 KEEPEFFECT_TEAM_ATTACK =0x02000000; // 攻击结界状态
const I64 KEEPEFFECT_TEAM_DEFENCE =0x04000000; // 护体结界状态
const I64 KEEPEFFECT_TEAM_SPEED =0x08000000; // 速度结界状态
const I64 KEEPEFFECT_TEAM_EXP =0x10000000; // 修炼结界状态
const I64 KEEPEFFECT_TEAM_SPIRIT =0x20000000; // 心灵结界状态
const I64 KEEPEFFECT_TEAM_CLEAN =0x40000000; // 净化结界状态
const I64 KEEPEFFECT_SMOKE =0x80000000; // 烟雾效果
const I64 KEEPEFFECT_DARKNESS =0x0000000100000000; // 黑暗效果
const I64 KEEPEFFECT_PALSY =0x0000000200000000; // 麻痹效果
const I64 KEEPEFFECT_MAXLIFE =0x0000000400000000; // 最大生命增加/减少
const I64 KEEPEFFECT_MAXENERGY =0x0000000800000000; // 最大体力增加/减少
const I64 KEEPEFFECT_ADD_EXP =0x0000001000000000; // 战斗经验增加
const I64 KEEPEFFECT_ATTRACT_MONSTER =0x0000002000000000; // 吸引怪物
const I64 KEEPEFFECT_XPFULL =0x0000004000000000; // XP满
const I64 KEEPEFFECT_ADJUST_DODGE =0x0000008000000000; // 调节总的躲避值
const I64 KEEPEFFECT_ADJUST_XP =0x0000010000000000; // 调节每次增加XP值
const I64 KEEPEFFECT_ADJUST_DROPMONEY =0x0000020000000000; // 调节怪物每次掉钱
const I64 KEEPEFFECT_PK_PROTECT =0x0000040000000000; // pk保护状态
const I64 KEEPEFFECT_PELT =0x0000080000000000; // 疾行状态
const I64 KEEPEFFECT_ADJUST_EXP =0x0000100000000000; // 战斗获得经验调整
const I64 KEEPEFFECT_HEAL =0x0000200000000000; // 治愈状态
const I64 KEEPEFFECT_FAINT =0x0000400000000000; // 晕
const I64 KEEPEFFECT_TRUCULENCE =0x0000800000000000; // 野蛮
const I64 KEEPEFFECT_DAMAGE =0x0001000000000000; // 调整受到的伤害
const I64 KEEPEFFECT_ATKER_DAMAGE =0x0002000000000000; // 调整对目标造成的伤害
const I64 KEEPEFFECT_CONFUSION =0x0004000000000000; // 混乱
const I64 KEEPEFFECT_FRENZY =0x0008000000000000; // 狂暴
const I64 KEEPEFFECT_EXTRA_POWER =0x0010000000000000; // 神力
const I64 KEEPEFFECT_TRANSFER_SHIELD =0x0020000000000000; // 护盾
const I64 KEEPEFFECT_SORB_REFLECT =0x0040000000000000; // 吸收反射
const I64 KEEPEFFECT_FRENZY2 =0X0080000000000000; // 另一种狂暴状态
//////////////////////////////////////////////////////////////////////
// 综合状态
//enum {
const I64 KEEPEFFECT_NOT_ACTIVE =KEEPEFFECT_DIE|KEEPEFFECT_FREEZE|KEEPEFFECT_PALSY;
const I64 KEEPEFFECT_NOT_CLEAR =KEEPEFFECT_TEAMLEADER|KEEPEFFECT_RED|KEEPEFFECT_DEEPRED; // 玩家死亡不清此状态
// 结界系统所有状态
const I64 KEEPEFFECT_TEAM_ALL =KEEPEFFECT_TEAM_HEALTH|KEEPEFFECT_TEAM_ATTACK|KEEPEFFECT_TEAM_DEFENCE
|KEEPEFFECT_TEAM_SPEED|KEEPEFFECT_TEAM_EXP|KEEPEFFECT_TEAM_SPIRIT|KEEPEFFECT_TEAM_CLEAN;
//};
//////////////////////////////////////////////////////////////////////
// 内部状态,不需要通过MsgPlayer通知其它玩家的状态。服务器内部使用(cq_magictype使用)
enum {
STATUS_NORMAL =0,
STATUS_DIE =1, // 死亡
STATUS_CRIME =2, // 犯罪闪蓝状态
STATUS_POISON =3, // 中毒
STATUS_TEAMLEADER =4, // 队长
STATUS_PKVALUE =5, // PK状态
STATUS_DETACH_BADLY =6, // 清除所有不良状态
STATUS_DETACH_ALL =7, // 清除所有魔法状态
STATUS_VAMPIRE =8, // ATKSTATUS中吸血
STATUS_DISAPPEARING =9, // 尸体消失状态
STATUS_MAGICDEFENCE =10, // 魔法防御提升/下降
STATUS_SUPER_MDEF =11, // 超级魔防
STATUS_ATTACK =12, // 攻击提升/下降
STATUS_REFLECT =13, // 攻击反射
STATUS_HIDDEN =14, // 隐身
STATUS_MAGICDAMAGE =15, // 魔法伤害提升/下降
STATUS_ATKSPEED =16, // 攻击速度提升/下降
STATUS_LURKER =17, // user only // 潜行,此状态下不受NPC攻击,对玩家无效
STATUS_SYNCRIME =18, // 帮派犯罪
STATUS_REFLECTMAGIC =19, // 魔法反射
STATUS_SUPER_DEF =20, // 超级防御
STATUS_SUPER_ATK =21, // self only // 超级攻击
STATUS_SUPER_MATK =22, // self only // 超级魔攻
STATUS_STOP =23,
STATUS_DEFENCE1 =24, // 防御提高/降低1
STATUS_DEFENCE2 =25, // 防御提高/降低2
STATUS_DEFENCE3 =26, // 防御提高/降低3
STATUS_FREEZE =27, // 冰冻状态
STATUS_SMOKE =28, // 烟雾效果
STATUS_DARKNESS =29, // 黑暗效果
STATUS_PALSY =30, // 麻痹效果
STATUS_TEAM_BEGIN =31,
STATUS_TEAMHEALTH =31, // 医疗结界
STATUS_TEAMATTACK =32, // 攻击结界
STATUS_TEAMDEFENCE =33, // 护体结界
STATUS_TEAMSPEED =34, // 速度结界
STATUS_TEAMEXP =35, // 修炼结界
STATUS_TEAMSPIRIT =36, // 心灵结界
STATUS_TEAMCLEAN =37, // 净化结界
STATUS_TEAM_END =37,
STATUS_SLOWDOWN1 =38, // 移动速度提升/下降
STATUS_SLOWDOWN2 =39, // 降低速度(仅在生命低于一半的时候。客户端表现)
STATUS_MAXLIFE =40, // 最大生命增加/降低
STATUS_MAXENERGY =41, // 最大体力增加/降低
STATUS_DEF2ATK =42, // 防御转换为攻击(power=被转换的防御百分比)
STATUS_ADD_EXP =43, // 战斗经验增加 -- 只能对队长使用,类似修炼结界效果
STATUS_DMG2LIFE =44, // 每次攻击伤害部分转换为自己的生命(power=被转换的百分比)
STATUS_ATTRACT_MONSTER =45, // 吸引怪物
STATUS_XPFULL =46, // XP满
//---jinggy---begin
STATUS_ADJUST_DODGE =47, //调节总的躲避值
STATUS_ADJUST_XP =48, //调节每次增加XP值
STATUS_ADJUST_DROPMONEY =49, //调节怪物每次掉钱
//---jinggy---end
STATUS_PK_PROTECT =50, // PK保护状态
STATUS_PELT =51, // 疾行状态
STATUS_ADJUST_EXP =52, // 战斗获得经验调整——允许对任何人使用
/////////////////////////////////
// 幻兽技能需要用到的状态
STATUS_HEAL =100, // 治愈
STATUS_FAINT =101, // 打晕
STATUS_TRUCULENCE =102, // 野蛮
STATUS_DAMAGE =103, // 调整受到的伤害
STATUS_ATKER_DAMAGE =104, // 调整对目标造成的伤害
STATUS_CONFUSION =105, // 混乱
STATUS_FRENZY =106, // 狂暴
STATUS_EXTRA_POWER =107, // 神力
STATUS_TRANSFER_SHIELD =108, // 护盾
STATUS_SORB_REFLECT =109, // 吸收反射
STATUS_FRENZY2 =110, // 另外一种狂暴状态
/////////////////////////////////
STATUS_LOCK =251, // 被锁定状态 -- only used in server
STATUS_LIMIT =256, // 角色状态不能超过这个值
};
//////////////////////////////////////////////////////////////////////
struct StatusInfoStruct;
class IStatus
{
public:
virtual OBJID GetID() PURE_VIRTUAL_FUNCTION_0
virtual ULONG ReleaseByOwner() PURE_VIRTUAL_FUNCTION_0
virtual bool IsValid() PURE_VIRTUAL_FUNCTION_0
virtual int GetPower() PURE_VIRTUAL_FUNCTION_0
virtual bool GetInfo(StatusInfoStruct* pInfo) PURE_VIRTUAL_FUNCTION_0
virtual void OnTimer(DWORD tCurr) PURE_VIRTUAL_FUNCTION
virtual bool ChangeData(int nPower, int nSecs, int nTimes=0) PURE_VIRTUAL_FUNCTION_0
virtual bool IncTime(int nMilliSecs, int nLimit) PURE_VIRTUAL_FUNCTION_0
virtual bool ToFlash() PURE_VIRTUAL_FUNCTION_0
};
typedef IGameObjSet<IStatus> IStatusSet;
typedef CGameObjSet<IStatus> CStatusSet;
////////////////////////////////////////////////////////////////
enum { MOVEMODE_WALK=0, // PathMove()的模式
MOVEMODE_RUN,
MOVEMODE_SHIFT, // to server only
MOVEMODE_JUMP,
MOVEMODE_TRANS,
MOVEMODE_CHGMAP,
MOVEMODE_JUMPMAGICATTCK,
MOVEMODE_COLLIDE,
MOVEMODE_SYNCHRO, // to server only
MOVEMODE_TRACK,
MOVEMODE_RUN_DIR0 = 20,
MOVEMODE_RUN_DIR7 = 27,
};
////////////////////////////////////////////////////////////////
const int _DELTA_X[9]={ 0, -1, -1, -1, 0, 1, 1, 1, 0 };
const int _DELTA_Y[9]={ 1, 1, 0, -1, -1, -1, 0, 1, 0 };
const int MAX_DIRSIZE = 8;
inline int GetDirByPos(int nFromX, int nFromY, int nToX, int nToY) // return MAX_DIRSIZE: error
{
if(nFromX < nToX)
{
if(nFromY < nToY)
return 7;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -