📄 user.h
字号:
// User.h: interface for the CUser class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_USER_H__BF5C20F1_5DBE_4E65_9099_E96EFAD7ECBA__INCLUDED_1)
#define AFX_USER_H__BF5C20F1_5DBE_4E65_9099_E96EFAD7ECBA__INCLUDED_1
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable:4786)
#include "GameBlock.h"
#include "UserData.h"
#include "Friend.h"
#include "Tutor.h"
#include "Item.h"
#include "Timeout.h"
#include "SquareDeal.h"
#include "gamemap.h"
#include "battleSystem.h"
#include "UserWeaponSkill.h"
#include "Myheap.h"
#include "T_SingleObjSet2.h"
#include "T_SingleMap2.h"
#include "team.h"
#include "magic.h"
#include "math.h"
#include "Package.h"
#include "SynAttr.h"
#include "protocol.h"
#include "booth.h"
#include "autolink.h"
#include "Enemy.h"
#include "AutoPtr.h"
#include "UserPackage.h"
#include "Role.h"
#include <vector>
#include <deque>
using namespace std;
#include "UserTable.h" // 各种表定义
#include "define.h" // Added by ClassView
////////////////////////////////////////////////////////////////
const int _MAX_USERFRIENDSIZE = 50;
const int _MAX_TUTORSIZE = 15;
const int _MAX_MONEYLIMIT = 1000000000;
const int USER_PACKAGE_SIZE = 20; // 仓库最多存多少东西
const int USERDROPITEM_RANGE = 5; // 自动掉
const int USERDROPITEM_RANGE2 = 9; // 手动扔
//const int ARROW_FLY_ALT = 60; // 箭支飞行高度
const int JUMP_ALT = 200; // 跳的最高高度
const int FLY_ALT = 100; // 飞的最高高度
const int PERCENT_DECDUR = 5; // 装备升级失败后渐耐久的几率
const int CRIME_KEEP_SECS = 30; // 犯罪维持时间
const int SELF_DEFENCE_SECS = 20; // 正当防卫持续时间
const int SYNCRIME_KEEP_SECS = 30; // 帮派犯罪维持时间
const int MAX_MENUTASKSIZE = 20; // 菜单系统中"回答TASK"的最大数量
const int PKVALUE_HALFKILL = 2;
const int PKVALUE_ONEKILL = 20; // 每杀死一个白名/红名玩家,增加PK值 // add huang 2004.1.11
const int PKVALUE_REDNAME = 21; // 红名玩家最低PK值
const int PKVALUE_BLACKNAME = 101; // 黑名玩家最低PK值
const int CHANCE_MAKEHOLE = 300;
const int SUPERMAN_KILLMONSTER_INCTIME = 800; // 无双状态每杀一个怪物的加时(MS)
const int SUPERMAN_KILLMONSTER_TIMELIMIT = 120*1000; // 无双状态延长的时间限制(MS)
const int TORNADO_KILLMONSTER_INCTIME = 1000; // 旋风状态每杀一个怪物的加时(MS)
const int TORNADO_KILLMONSTER_TIMELIMIT = 120*1000; // 旋风状态延长的时间限制(MS)
const int MASK_CHANGELOOK = 10000000; // 变身时LOCKFACE的掩码,face=face + new_face*10000000
const int MAX_SIZEADD = 2; // 最大的SizeAdd,用于魔法区域的放大搜索(注意该数据不要太大)
const int CHGMAP_LOCK_SECS = 10; // 进入地图后的保护时间
const int SYNWAR_NOMONEY_DAMAGETIMES = 10; // 帮派没钱时增加的伤害倍数
const int PICK_MORE_MONEY = 1000; // 捡钱多时,发ACTION消息
const int SYNCHRO_SECS = 5; // 同步消息5秒内同步
const int IDENT_FEE = 100; // 鉴定的价格
const int UNIDENT_SALE_FEE = 1; // 卖未鉴定的价格
const int MAX_USER_XP = 100; // 最大XP值
const int ADD_XP_SECS = 30; // 每隔30秒增加一次XP
const int ADD_XP_VALUE = 15; // 每次增加15点XP
const int MAX_XPFULL_SECS = 60; // XP满最多持续的时间
//const int ADD_XPFULL_SECS_KILLMONSTER = 1; // 每杀死一只怪物多持续1秒钟
const int ADJUST_EXPFORMAT_LEVEL = 70; // 70级以上调整经验存储格式为/10
/////////////////////////////////////////////////////////////////////////
// 导师系统相关
const int ADDSTUDENT_TUTOREXP = 10; // 招收徒弟需要消耗的导师经验
const int DELSTUDENT_TUTOREXP = 1000; // 开除学员扣的导师经验
const int LEAVETUTOR_LEVEL = 10; // 10级以上玩家叛师要扣经验
const int _MIN_GIVEEXP_LEV = 30; // 学员为导师提供奖励经验的最低等级
const int TUTOREXP_PERCENT = 40; // 一级学员奖励给导师的经验比例
const int TUTOREXP2_PERCENT = 10; // 二级学员奖励给导师的经验比例
const int GETEXP_PER_TUTOREXP0 = 500; // 初级导师消耗1点导师经验能够获得的学员贡献经验
const int GETEXP_PER_TUTOREXP1 = 700; // 中级导师消耗1点导师经验能够获得的学员贡献经验
const int GETEXP_PER_TUTOREXP2 = 1000; // 高级导师消耗1点导师经验能够获得的学员贡献经验
//---jinggy---帮派---begin
const int SYNREPUTE_SECS = 6*60; // 玩家每在线6分钟,加10点军团 声望和贡献度。
const int SYNREPUTE_VAL_PEREACH = 10;
const int SYNREPUTE_VAL_PROFFER = 1; // 玩家每在线6分钟,加一点军团贡献度。
#define SYNMEM_TIMEONLINE_INTERVAL 15*60 //每15分钟更新一次帮派成员在线时间
#define SYNMEM_TIMEONLINE_INCREPUTE 10 //③、 军团成员每人每在线6分钟,军团声望增加10点
//---jinggy---帮派---end
//---jinggy---铸造---begin
const int EQUIPMENT_EXP_ADD_SECS = 10*60; // 每10分钟增加一次小于9级的武器经验
const int EQUIPMENT_EXP_ADD_SECS_AFTER9 = 15*60; // 每15分钟增加一次9级的武器经验
const int WEAPON_UPEXP_MAXVALUE = 8;
const int ARMOR_UPEXP_MAXVALUE = 10;
const int NECKLACE_UPEXP_MAXVALUE = 12;
const int SHOE_UPEXP_MAXVALUE = 14;
const int BANGLE_UPEXP_MAXVALUE = 16;
const int MAX_LEVEL_WARLEVEL = 9;
const int DEC_WARGHOSTEXP_FORREPAIR = 3 ;
//---jinggy---铸造---end
const int PROFFER_BEKILL = 100; // 每被敌对帮派玩家杀死一次减少的帮派贡献度
const int SYNREPUTE_BEKILL = 100; // 每次被敌对帮派玩家杀死减少的帮派声望
const int NEWBIE_LEVEL = 40; // 新手的等级
const int _MIN_TUTOR_LEVEL = 50; // 导师最低等级
enum { FLYMAP_ERROR=-1, FLYMAP_NORMAL, FLYMAP_MAPGROUP };
enum { ATTACK_TIME=false, BEATTACK_TIME=true, BY_WEAPON=false, BY_MAGIC=true };
////////////////////////////////////////////////////////////////
// sex define
enum {SEX_NONE = 0, SEX_MAN, SEX_WOMAN, SEX_ASEXUAL, SEX_ALL};
// requre sex define
const unsigned char SEX_REQ_MAN = 0x01;// 男的可用
const unsigned char SEX_REQ_WOMAN = 0x02;// 女的可用
const unsigned char SEX_REQ_EUNUCH = 0x04;// 太监可用
////////////////////////////////////////////////////////////////
const int MASTER_USERLEV = 120;
const int MAX_USERLEV = 130;
//const int MAX_EUDEMONLEV = 130;
typedef IGameObjSet<CUserWeaponSkill> IUserWeaponSkillSet;
typedef CGameObjSet<CUserWeaponSkill> CUserWeaponSkillSet;
////////////////////////////////////////////////////////////////
enum
{
RACE_NONE = 0, // 未知
RACE_HUMAN = 1, // 人类
RACE_SPRITE = 2, // 精灵
RACE_DARKSPRITE = 3, // 暗精灵
};
////////////////////////////////////////////////////////////////
enum { PROFSORT_MAGICIAN =1,
PROFSORT_SOLDIER =2,
PROFSORT_ARCHER =3,
// no use
PROFSORT_WIZARD =4,
PROFSORT_DAOIST =10,
PROFSORT_DAOISTGOLD =11,
PROFSORT_DAOISTWOOD =12,
PROFSORT_DAOISTWATER=13,
PROFSORT_DAOISTFIRE =14,
PROFSORT_DAOISTEARTH=15,
};
////////////////////////////////////////////////////////////////
enum {
NOBILITY_RANK_NONE = 0, // 无爵位
NOBILITY_RANK_BARON = 1, // 爵士
NOBILITY_RANK_VISCOUNT = 2, // 子爵
NOBILITY_RANK_EARL = 3, // 伯爵
NOBILITY_RANK_MARQUESS = 4, // 侯爵
NOBILITY_RANK_DUKE = 5, // 公爵
};
////////////////////////////////////////////////////////////////
class IUserStorage
{
public:
virtual bool SendStorageInfo(OBJID idNpc, int nPosition = ITEMPOSITION_STORAGE) PURE_VIRTUAL_FUNCTION_0
virtual bool CheckIn(OBJID idNpc, CItem* pItem, bool bUpdate, int nPosition = ITEMPOSITION_STORAGE) PURE_VIRTUAL_FUNCTION_0
virtual CItem* CheckOut(OBJID idNpc, OBJID idItem, bool bUpdate, int nPosition = ITEMPOSITION_STORAGE) PURE_VIRTUAL_FUNCTION_0
virtual int GetStorageCount() PURE_VIRTUAL_FUNCTION_0
virtual int GetWeight(OBJID idItem) PURE_VIRTUAL_FUNCTION_0
virtual OBJID GetItemType(OBJID idItem) PURE_VIRTUAL_FUNCTION_0
virtual DWORD GetAmountLimit(OBJID idItem) PURE_VIRTUAL_FUNCTION_0
};
const int MASTER_WEAPONSKILLLEVEL = 12;
const int MAX_WEAPONSKILLLEVEL = 20;
const int nWeaponSkillLeveUpNeedExp[20] = {
0,
1200,
68000,
250000,
640000,
1600000,
4000000,
10000000,
22000000,
40000000,
90000000,
190000000/2,
285000000/2,
427500000/2,
641250000/2,
961875000/2,
1442812500/2,
2164218750/2,
3246328125/2,
4200000000/2
};
//////////////////////////////////////////////////////////////////////
enum INFO_ID{
INFO_NONE=0,
INFO_ITEM,
INFO_FRIEND,
INFO_ENEMY,
INFO_WEAPONSKILL,
INFO_MAGIC,
INFO_SYNATTR,
INFO_STATUS,
INFO_TEAM,
};
////////////////////////////////////////////////////////////////
enum REMOTE_CALL{
REMOTE_CALL_DROP_LEADER,
REMOTE_CALL_LEAVE_SYN,
REMOTE_CALL_TEAM_CLOSE_MONEY,
REMOTE_CALL_TEAM_CLOSE_ITEM,
REMOTE_CALL_TEAM_CLOSE_GEM_ACCESS,
REMOTE_CALL_TEAM_HUNTKILL,
};
////////////////////////////////////////////////////////////////
class IChangeTeam
{
public:
virtual bool AddTeamMember(OBJID idUser) PURE_VIRTUAL_FUNCTION_0
virtual bool DelTeamMember(OBJID idUser) PURE_VIRTUAL_FUNCTION_0
virtual bool DelTeam() PURE_VIRTUAL_FUNCTION_0
virtual bool SendInfo(SOCKET_ID idSocket, OBJID idAgent) PURE_VIRTUAL_FUNCTION_0
};
//////////////////////////////////////////////////////////////////////
// extern int RankOfIndex(int nPos);
////////////////////////////////////////////////////////////////
class CNetMsg;
class CPackage;
class CTransformation;
class CAgent;
class CTaskDetail;
class CUser : public CGameObj, public CRole, IUserStorage, IChangeTeam
{
protected:
CUser();
virtual ~CUser();
public:
static CUser* CreateNew () { return new CUser; }
void ReleaseByOwner () { delete this; }
void OnTimer (time_t tCurr);
static CUser* CreateNewUser (PROCESS_ID idProcess, SOCKET_ID idSocket, UserInfoStruct* pInfo);
bool Create (PROCESS_ID idProcess, SOCKET_ID idSocket, OBJID idUser);
bool Init (); // login 和 change map_group都要执行的操作
virtual bool FindAroundObj (OBJID idObjType, OBJID idObj, void** pp) { return GetMap()->QueryObj(GetPosX(), GetPosY(), idObjType, idObj, pp); }
virtual IRole* FindAroundRole (OBJID id) { return GetMap()->QueryRole(GetPosX(), GetPosY(), id); }
virtual CUser* FindAroundUser (OBJID id);
protected: // interface
virtual bool QueryRole (void** ppv) { return *ppv=(IRole*)this,true; }
virtual bool QueryObj (OBJID idObjType, void** ppv) { if(idObjType == OBJ_USER) return *ppv=this,true; return *ppv=NULL,false; }
virtual CUser* QueryOwnerUser () { return this; }
public:
virtual IMapThing* QueryMapThing () { return (IMapThing*)this; }
IRole* QueryRole () { return (IRole*)this; }
IChangeTeam* QueryChangeTeam () { return (IChangeTeam*)this; }
protected:
virtual IUserWeaponSkillSet* QueryWeapenSkill() { return m_pUserWeaponSkillSet; }
public: // IMapThing
// virtual OBJID GetID();
// virtual int GetPosX();
// virtual int GetPosY();
virtual int GetObjType () { return CGameObj::GetObjType(); }
virtual void SendShow (IRole* pRole);
public: // IRole
virtual OBJID GetID () { return m_data.m_Info.id; }
virtual LPCTSTR GetName () { return m_data.m_Info.szName; }
virtual LPCTSTR GetMate () { return m_data.m_Info.szMate; }
virtual int GetSex () { if(m_data.GetLookFace()%2 == 0) return SEX_WOMAN; return SEX_MAN; }
virtual DWORD GetLookFace ();
virtual DWORD GetHair() { return m_data.m_Info.dwHair; }
virtual char GetLength () { return m_data.m_Info.cLength; }
virtual char GetFat () { return m_data.m_Info.cFat; }
virtual int GetPosX () {return m_nPosX;}
virtual int GetPosY () {return m_nPosY;}
virtual int GetDir ();
virtual void SetDir (int nDir) { m_nDir = nDir%8; }
virtual int GetPose ();
virtual void SetPose (int nPose) { m_nPose = nPose; }
virtual void SetEmotion (int nEmotion) { m_nEmotin = nEmotion; }
virtual DWORD GetMoney () { return m_data.m_Info.dwMoney; }
virtual DWORD GetMoneySaved () { return m_data.m_Info.dwMoney_saved; }
// virtual DWORD GetAuctionMoney () { return m_data.m_Info.dwAuction_Money; }//LW
virtual OBJID GetMateID ();
// virtual bool AddItem (CItem* pItem);
void SetLife(int nLife, BOOL bUpdate=false);
virtual DWORD GetLife ();
virtual DWORD GetMaxLife ();
virtual DWORD GetMana () { return m_data.GetMana(); } // not over
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -