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

📄 user.h

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 H
📖 第 1 页 / 共 4 页
字号:
protected:
	void		CallBackAllEudemon(bool bNow=true);
	
protected:
	//========
	struct ST_EUDEMON {
		CAutoLink<CMonster>		pEudemon;
		CItemPtr				pEudemonItem;
		CTimeOut				tEudemon;
	};
	typedef std::deque<ST_EUDEMON*>	EUDEMON_SET;
	EUDEMON_SET		m_setEudemon;

	OBJID		m_idLinkEudemonItem;
	OBJID		m_idLinkEudemonType;
	int			m_nLinkValue;
	typedef std::vector<int>	LINKMAGIC_SET;
	LINKMAGIC_SET	m_setLinkMagic;

protected:
	ST_EUDEMON*	QueryEudemonSt(OBJID idItem);
public: // syndicate ---------------------------------------------------------------------------------
	bool		SendAllSynInfo()		{ return m_pSyn->SendInfoToClient(); }
	CSynAttr*	QuerySynAttr()			{ CHECKF(m_pSyn); return m_pSyn; }		//? 调用时注意检查是否有帮派
	void		AwardSynWarScore(CNpc* pNpc, int nScore);
	bool		IsHostileSynMember	(CUser* pUser);
	CSyndicate* GetSyndicate	(void);
	int			QuerySynProffer	(void)	{ if(m_pSyn) return m_pSyn->GetProffer(); return 0; }
	void		SetSynProffer	(int nData)		{ if(m_pSyn) m_pSyn->SetProffer(nData); }
	int			QuerySynRank	(void)	{ if(m_pSyn) return m_pSyn->GetSynRankShow(); return RANK_NONE; }
	bool		IsMemberOfSyn	(OBJID idSyn);

protected: // data
	CSynAttr*		m_pSyn;
	CTimeOut		m_tIncRepute;
	CTimeOut		m_tIncPotential;

public: // user status --------------------------------------------------------------------------------
//	IStatus*	QueryStatus(OBJID idType)		{ CHECKF(m_setStatus); return m_setStatus->GetObj(idType); }
//	IStatusSet*	QueryStatusSet()				{ CHECKF(m_setStatus); return m_setStatus; }
	void		SetCrimeStatus(int nStatus=STATUS_CRIME, int nTime=CRIME_KEEP_SECS);
	void        SetSelfDefStatus(int nTime=SELF_DEFENCE_SECS);      //add huang 2004.1.14
protected: // data
//	IStatusSet*	m_setStatus;

public: // friend --------------------------------
	int			GetFriendAmount	()					{ return m_setFriend.size(); }
	CFriend*	GetFriendByIndex(int idx)			{ CHECKF(idx>=0 && idx<m_setFriend.size()); return m_setFriend[idx]; }
	CFriend*	GetFriend		(OBJID idFriend);
	bool		AddFriend		(OBJID idFriend, LPCTSTR szFriendName);		// 未检查重复添加
	bool		DelFriend		(OBJID idFriend);			// 同时删除记录
	void		BroadcastFriendsMsg	(CNetMsg* pMsg);
protected:
	bool		CreateAllFriend	(IDatabase* pDb);
	void		DeleteAllFriend	();
	void		SendFriendInfo	();

public:	// tutor&student ------------------------------------
	// tutor
	CTutor*		GetTutor			()					{ return m_pTutor; }
	bool		AddTutor			(OBJID idTutor, LPCTSTR szName);
	bool		DelTutor			();

	void		AwardTutorExp		(int nTutorExp);	// 获得导师经验
	bool		TakeExpFromStudent	(int nExpTake);		// 取得学员贡献的经验

	// student
	int			GetStudentAmount	()					{ return m_setStudent.size(); }
	CTutor*		GetStudentByIndex	(int idx)			{ CHECKF(idx>=0 && idx<m_setStudent.size()); return m_setStudent[idx]; }
	CTutor*		GetStudent			(OBJID idStudent);
	bool		DelStudent			(OBJID idStudent);
	bool		IsStudentFull		()					{ return (GetStudentAmount() >= (GetTutorLevel()+1)*5); }

	void		SendTutorInfo		();
	void		NotifyTutorStatus	(int nStatus);

protected:
	bool		DelTutorRef			();
	bool		AddStudentRef		(const TutorInfoStruct* pInfo);
	bool		DelStudentRef		(OBJID idStudent);

	bool		CreateAllTutor	(IDatabase* pDb);
	void		DeleteAllTutor	();
	
public: // enemy ------------------------------------
	CEnemy*		QueryEnemy()						{ return m_pEnemy; }
protected:
	CJavaObj<CEnemy>	m_pEnemy;

public:	//-------------- 武器熟练度 --------------------
	void		SendAllWeaponSkillInfo	();
	void		AddWeaponSkillExp		(int nSkillType, int nExp);
	bool		CheckWeaponSubType		(int nSubType, int nNum=0);

	BOOL		AwardWeaponSkill	(int nSkillType, int nLev);
	CUserWeaponSkill* GetWeaponSkill(int nSkillType);

	DWORD		GetWeaponSkillLev	(OBJID idWeaponType);
	bool		UnlearnAllSkill		();

protected: 
	BOOL		CreateWeaponSkill	(IDatabase* pDb);
	bool		SaveAllWeaponSkillInfo	();

public: // money --------------------------------
	virtual bool	SpendMoney	(DWORD nMoney, bool bSynchro);
	virtual bool	GainMoney	(DWORD nMoney, bool bSynchro);
	bool			SaveMoney	(DWORD nMoney, bool bSynchro = false);
	bool			DrawMoney	(DWORD nMoney, bool bSynchro = false);
public: // tick --------------------------------
	void			ProcessTick	(DWORD dwTime);
protected:
	deque<DWORD>	m_dequeServerTick;
	DWORD			m_dwFirstServerTick;
	DWORD			m_dwLastServerTick;

	DWORD			m_dwFirstClientTick;
	DWORD			m_dwLastClientTick;

	DWORD			m_dwLastRcvClientTick;

public: // weather ----------------------------------
	OBJID			GetWeatherID()					{ return m_idWeather; }
	void			SetWeatherID(OBJID id)			{ m_idWeather = id; }
	bool			SetWeather(int nType, int nIntensity, int nDir, DWORD nColor, DWORD nKeepSecs, DWORD nSpeedSecs);
protected:
	OBJID			m_idWeather;

public: // energy -------------------------------------
	void		SetEnergy			(int nEnergy)	{ m_data.m_Info.usEnergy = nEnergy; }
	int			GetEnergy			()				{ return m_data.m_Info.usEnergy; }
	int			GetMaxEnergy		()				{ IStatus* pStatus = QueryStatus(STATUS_MAXENERGY); if (pStatus) return ::CutTrail(0, AdjustData(m_data.m_Info.usMaxEnergy, pStatus->GetPower(), 100)); return m_data.m_Info.usMaxEnergy; }
	void		AddEnergy			(int nEnergy)	{ m_data.m_Info.usEnergy = ::CutRange(m_data.m_Info.usEnergy+nEnergy, 0, GetMaxEnergy()); }
	void		ResetEnergyInc		()				{ m_tEnergy.Update(); }
protected:
	CTimeOut		m_tEnergy;

public: // light --------------------------------------
	void		SetLight			(int dwRGB, int nSecs=0);
	void		SendLight			();

public: // CBooth -------------------------------------
	CBooth*		QueryBooth()						{ return m_pBooth; }
	bool		CreateBooth(int nPosX, int nPosY, int nDir)	{ if(m_pBooth) return false; return (m_pBooth = CBooth::CreateNew(m_idProcess, this, nPosX, nPosY, nDir)) != NULL; }
	void		DestroyBooth()						{ if(m_pBooth) m_pBooth->ReleaseByOwner(); m_pBooth = NULL; }
protected:
	CBooth*			m_pBooth;		// NULL: no in booth

public: // login, return false: logout_user
	bool			EnterMap		();
	bool			LeaveMap		();
	bool			SendItemSet		();
	bool			SendGoodFriend	();

public: // rebirth ---------------------------------------
	bool		Rebirth(int nProf, int nLook);
protected:
	bool		CheckRebirth(int nProf, CRebirthData* pData);
	void		ResetUserAttrib(int nOldProf, int nOldLevel, int nNewProf, int nNewLevel, int nNewLook);
	void		ResetEquipLevel(int nNewLevel);
	int			GetRebirthAddPoint(int nOldProf, int nOldLevel);

public: // mapgroup ---------------------------------
	bool			ChangeMapGroup	(PROCESS_ID idProcess, OBJID idMap, int nPosX, int nPosY);	// out
	bool			JoinMap			(OBJID idMap, int nPosX, int nPosY);		// in
	bool			AppendObjInfo	(INFO_ID nType, void* pInfo);
protected:
	bool			AppendItem		(ItemInfoStruct* pInfo);
	bool			AppendFriend	(FriendInfoStruct* pInfo);
	bool			AppendWeaponSkill	(UserWeaponSkillInfoStruct* pInfo);
	bool			AppendStatus	(StatusInfoStruct* pInfo);
	bool			LeaveMapGroup	();

public: // common ------------------------------------------
	CAutoLink<CUser>&	QueryLink	()					{ return m_link; }

public: // IUserSquareDeal ------------------------------------------
	bool	CreateSquareDeal		(CUser* pTarget);
	ISquareDeal*	QuerySquareDeal	()		{ m_ifaceSquareDeal.CheckDistance(); return m_ifaceSquareDeal.m_pSquareDeal; }

	class XUserSquareDeal : IUserSquareDeal			// SquareDeal 接口 
	{
	public: // constructor
		XUserSquareDeal()			{ m_pSquareDeal = NULL; }
		~XUserSquareDeal()			{ if(m_pSquareDeal) m_pSquareDeal->Release(); }
		void	CheckDistance();

	public:
		virtual bool	Create		(ISquareDeal* pSquareDeal);
		virtual ULONG	Release		();
		virtual CUser*	QueryUser	()					{ return This(); }

	public: // application
		// return false: too weight
		virtual bool	AddItem		(CItem* pItem, int nAmount, int nAllWeight);
		// return false: too more
		virtual bool	AddMoney	(int nAllMoney);
		virtual void	ClickOK		();

	protected:
		ISquareDeal*		m_pSquareDeal;

	private:
		CUser*		This()	{ return m_pParent; }
		CUser*		m_pParent;
		friend class CUser;
	}	m_ifaceSquareDeal;

	friend class CUser::XUserSquareDeal;

protected: // 登录控制量
	enum { STEP_NONE=0, STEP_LOGIN, STEP_ENTERMAP };
	int				m_nStep;
	
protected: // 玩家管理的对象
	typedef vector<CFriend*>	FRIEND_SET;
	FRIEND_SET	m_setFriend;
	
	typedef vector<CTutor*>		TUTOR_SET;
	TUTOR_SET	m_setStudent;
	CTutor*		m_pTutor;
	DWORD		m_dwExpToTutor;

	IUserPackage*	m_pPackage;	// 背包
public:
	IUserPackage*	QueryPackage()		{ ASSERT(m_pPackage); return m_pPackage; }

protected:

	CItemPtr	m_pHelmet;
	CItemPtr	m_pNecklace;	
	CItemPtr	m_pArmor;	
	CItemPtr	m_pWeaponR;	
	CItemPtr	m_pWeaponL;	
	CItemPtr	m_pRingR;	
	CItemPtr	m_pRingL;	
	CItemPtr	m_pShoes;
	CItemPtr	m_pMount;
	CItemPtr	m_pSprite;	// 精灵 -- add by zlong 2003-11-27
	CItemPtr	m_pMantle;	// 披风 -- zlong 2004-02-04

	//---jinggy---2004-11-19---装备经验值---begin
	CTimeOut    m_arrTimeOutForEquipExp[ITEMPOSITION_EQUIPEND-ITEMPOSITION_EQUIPBEGIN];
	int			m_arrEquipIncExp[ITEMPOSITION_EQUIPEND-ITEMPOSITION_EQUIPBEGIN];//设备战魂经验值的增量
	CTimeOut    m_tEquipWarGhostExp; //检测装备的战魂间隔时间
	bool		m_bIsEnableWarGhostExp;

	CTimeOut	m_tTimeOnline; //帮派成员在线时间
	//---jinggy---2004-11-19---装备经验值---end

	CUserData	m_data;

protected: // 玩家状态
//	int			m_nPosX;
//	int			m_nPosY;
//	int			m_nDir;
	int			m_nPose;
	int			m_nEmotin;
	int			m_dwXP;
	int			m_nSynDressArmorType;
	Array<int>	m_setSlowHealUp2Life;
	Array<int>	m_setSlowHealUp2Mana;
//	CGameMap*	m_pMap;

protected:
	void UpdateEquipmentExp_Init();
	void UpdateEquipmentExp_Startup(DWORD dwPos,int nSecs);
	void UpdateEquipmentExp_Stop(DWORD dwPos);
	void UpdateEquipmentExp();
public:
	//---jinggy---2004-11-12---用武器上嵌入的攻击类宝石攻击对方
	bool UseSkillAtk(OBJID idDes);
public:	
	CTaskDetail* GetTaskDetail();
	void SetSynDressArmorType(int nArmorType);	
//	void NotifyChatRoomOffline();
	bool ApplyAttackSyn(CNpc * pNpc);
	int GetAvailableSynFund();
	bool FlyToRandomPos();
	bool FlyToMainMap();
	bool IsEmbedGemType(int nGemType);
	DWORD GetLastLogin();
	void AddMoney(DWORD dwMoney);
	bool IsSynLeader();
	bool CheckBadge(int nItemType=0);
	bool DelAllBadge();
	bool AddBadge();
	void ProcessMsgAction(int nAction, int nData, OBJID id);
	DWORD		m_dwLastCoolShow;

private:
	IUserWeaponSkillSet*	m_pUserWeaponSkillSet;

protected: // fight
	CBattleSystem*		m_pBattleSystem;
	CTimeOutMS			m_tFight;
	CTimeOut			m_tXp;
	CTimeOut			m_tPK;
	CTimeOutMS			m_tSlowHealLife;
	CTimeOutMS			m_tSlowHealMana;
	CTimeOut			m_tAutoHealLife;					// 每几秒自动补血。跑、跳不给补血。
	CTimeOut			m_tEquipmentDurability;				// 装备耐久度损耗
	CTimeOut			m_tAutoHealMaxLife;					// 每分钟自动恢复最大血量
	int					m_nFightRate;						// 攻击的间隔毫秒数
	int					m_nFightPause;						// 僵硬状态时,一次性增加的间隔毫秒数

protected: // 应用控制量
//	int			m_nWalkStep;
//	CTimeOut	m_tLock;
	CAutoLink<CUser>	m_link;

protected: // 控制量
	SOCKET_ID	m_idSocket;
//	PROCESS_ID	m_idProcess;
protected:
	//---jinggy---2004-11-17---升级装备经验值---已经穿在身上的装备的map---begin
	map<OBJID,CTimeOut*> m_mapEquipmentsUsed ;
	typedef pair <OBJID,CTimeOut*> PairID;	
	//---jinggy---2004-11-17---升级装备经验值---已经穿在身上的装备的map---end

	MYHEAP_DECLARATION(s_heap)
};



#endif // !defined(AFX_USER_H__BF5C20F1_5DBE_4E65_9099_E96EFAD7ECBA__INCLUDED_1)

⌨️ 快捷键说明

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