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

📄 user.h

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 H
📖 第 1 页 / 共 4 页
字号:
	virtual DWORD	GetMaxMana			();

	virtual DWORD	GetMinAtk			();
	virtual DWORD	GetMaxAtk			();
	virtual DWORD	GetMgcMinAtk		();
	virtual DWORD	GetMgcMaxAtk		();
	virtual DWORD	GetAttack			();
	virtual DWORD	GetMagicAttack		();
	virtual DWORD	GetAtkHitRate		();

	virtual DWORD	GetDef				();
	virtual DWORD	GetDefence			();
	virtual DWORD	GetDefence2			();

	virtual DWORD	GetDex				();
	virtual DWORD	GetDexterity		();

	virtual DWORD	GetDdg				();
	virtual DWORD	GetDodge			();

//	virtual DWORD	GetMagicAtk			();
	virtual DWORD	GetMagicDef			();

	virtual DWORD	GetInterAtkRate		();
	virtual DWORD	GetIntervalAtkRate	();
	virtual int		GetAttackRange		(int nTargetSizeAdd);
	virtual	int		GetSizeAdd			();
	virtual	int		GetLuck				();

	virtual void	AwardBattleExp		(int nExp, bool bGemEffect=true);
	virtual int 	AdjustHitRate		(int nHitRate);
	virtual int 	AdjustAttack		(int nAtk);
	virtual int 	AdjustDefence		(int nDef);
	virtual int 	AdjustMagicAtk		(int nAtk);
	virtual int 	AdjustMagicDef		(int nDef);
	virtual int 	AdjustBowDefence	(int nDef);
	virtual int 	AdjustWeaponDamage	(int nDamage);
	virtual int 	AdjustMagicDamage	(int nDamage);
	virtual void	SetFightPause		(int nInterval)			{ m_nFightPause = nInterval; }

	virtual int		GetDistance			(IMapThing* pTarget)	{ return __max(abs(GetPosX() - pTarget->GetPosX()), abs(GetPosY() - pTarget->GetPosY())); }
	virtual int		GetDistance			(int x, int y)			{ return __max(abs(GetPosX() - x), abs(GetPosY() - y)); }

	virtual int 	GetExp				()						{ return m_data.m_Info.nExp; }
	virtual void	SetStatus			(int nStatus, bool bSynchro=true);
	virtual void	ClsStatus			(int nStatus, bool bSynchro=true);
	virtual DWORD	GetStatus			()						{ return m_data.m_Info.dwStatus; }
	virtual void	ClearAllStatus		();
//	virtual BOOL	CheckStatus			(int nStatus);
	virtual I64 	GetEffect			();

	virtual DWORD	GetLev				();
	virtual void	IncLev				(int nLev);
	virtual void	AllotPoint			();

	virtual void	ClrAttackTarget		()						{ SetAttackTarget(NULL); QueryMagic()->BreakAutoAttack(); }
	virtual bool	SetAttackTarget		(IRole* pTarget);
	virtual OBJID	GetAttackTargetID	()						{ if (m_pBattleSystem) return m_pBattleSystem->GetTargetID(); return ID_NONE; }
	virtual bool	AutoSkillAttack		(IRole* pTarget)		{ return QueryMagic()->AutoAttackTarget(pTarget); }
	virtual bool	AdditionMagic(int nLifeLost, int nDamage)				{ return false; }
	virtual int		Attack				(IRole* pTarget);
	virtual bool	BeAttack			(bool bMagic, IRole* pTarget, int nPower, bool bReflectEnable=true);
	virtual bool	MagicAttack			(int nType, OBJID idTarget, int x, int y);
	virtual void	Kill				(IRole* pTarget, DWORD dwDieWay);
	virtual void	BeKill				(IRole* pTarget = NULL);
	virtual bool	BroadcastTeamLife	(bool bMaxLife=false);
	virtual bool	IsAtkable			(IRole* pTarget, bool bSendHint=false);
	virtual bool	IsBeAtkable			();
	virtual void	SendDamageMsg		(OBJID idTarget, int nDamage);
	virtual void	ProcessPk			(CUser* pTargetUser);
	virtual bool	TransferShield		(bool bMagic, IRole* pAtker, int nDamage);

	virtual int		GetHelmetTypeID		()			{ if(m_pHelmet) return m_pHelmet->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetArmorTypeID		()			{ if(m_nSynDressArmorType) return m_nSynDressArmorType; if(m_pArmor) return m_pArmor->GetInt(ITEMDATA_TYPE);  return ID_NONE;}
	virtual int		GetWeaponRTypeID	()			{ if(m_pWeaponR) return m_pWeaponR->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetWeaponLTypeID	()			{ if(m_pWeaponL) return m_pWeaponL->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetNecklaceTypeID	()			{ if(m_pNecklace) return m_pNecklace->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetRingRTypeID		()			{ if(m_pRingR) return m_pRingR->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetRingLTypeID		()			{ if(m_pRingL) return m_pRingL->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetShoesTypeID		()			{ if(m_pShoes) return m_pShoes->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetMountTypeID		()			{ if(m_pMount) return m_pMount->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	//virtual int		GetSpriteTypeID		()			{ if(m_pSprite) return m_pSprite->GetInt(ITEMDATA_TYPE); return ID_NONE; }
	virtual int		GetMantleTypeID		()			{ if(m_pMantle) return m_pMantle->GetInt(ITEMDATA_TYPE); return ID_NONE; }

	virtual CItem*	GetWeaponR			()			{ return m_pWeaponR; }
	virtual CItem*	GetWeaponL			()			{ return m_pWeaponL; }

	virtual char*	GetMedal			()			{ return m_data.m_Info.setMedal; }
	virtual DWORD	GetMedalSelect		()			{ return m_data.m_Info.dwMedal_select; }
//	virtual void	SetMedalSelect		(int nData)	{m_data.SetMedalSelect(nData);}
	virtual char*	GetTitle			()			{ return m_data.m_Info.setTitle; }
//	virtual DWORD	GetTitleSelect		()			{ return m_data.m_Info.dwTitle_select; }
//	virtual void	SetTitleSelect		(int nData)	{m_data.SetTitleSelect(nData);}
	virtual DWORD	GetPotential		()			{ return m_data.m_Info.nPotential; }	// 取得潜能值
	virtual DWORD	GetMetempsychosis	()			{ return m_data.m_Info.ucMetempsychosis; }

	virtual bool	IsSimpleMagicAtk	();
	virtual int 	GetSimpleMagicHitRate();

	virtual int		GetTutorExp			()			{ return m_data.m_Info.nTutorExp; }
	virtual UCHAR	GetTutorLevel		()			{ return m_data.m_Info.ucTutorLevel; }
	virtual UCHAR	GetMercenaryRank	()			{ return m_data.m_Info.ucMercenaryRank; }
	virtual DWORD	GetMercenaryExp		()			{ return m_data.m_Info.dwMercenaryExp; }
	virtual DWORD	GetExploit			()			{ return m_data.m_Info.dwExploit; }
    virtual DWORD   GetAllTutorLevel    ();

	virtual bool	IsAlive				();
	virtual bool	IsTalkEnable		()			{ return true; }	// not over
	virtual bool	IsGM				()			{ return (strstr(GetName(), "[GM]") || strstr(GetName(), "[PM]")); }
	virtual bool	IsPM				()			{ return (strstr(GetName(), "[PM]") != NULL); }
	virtual bool	IsMonster			()			{ return false; }
//	virtual bool	IsScene				()			{ return false; }
	virtual bool	IsDelThis			()			{ return false; }
	virtual bool	IsVirtuous()					{ return GetPk() < PKVALUE_REDNAME && !QueryStatus(STATUS_CRIME); }
	virtual bool	IsEvil()						{ return GetPk() >= PKVALUE_REDNAME || QueryStatus(STATUS_CRIME); }
	virtual bool	IsBowman			()			{ return m_pWeaponR && m_pWeaponR->IsBowSort(); }
	virtual bool	IsShieldEquip		()			{ return m_pWeaponL && m_pWeaponL->IsShield(); }
	virtual bool	IsWing				()			{ return NULL; }	//QueryStatus(STATUS_WING) != NULL; }
	virtual bool	IsSendBlockInfo		()			{ return true; }
	virtual bool	IsAutoAllot			(void)		{ return (m_data.m_Info.ucAuto_allot != 0); }
	virtual bool	IsNewbie			()			{ return GetLev() < NEWBIE_LEVEL; }

	virtual bool	SendMsg				(CNetMsg* pMsg);
	virtual void	BroadcastRoomMsg	(CNetMsg* pMsg, bool bSendSelf);
	virtual void	BroadcastRoomMsg	(LPCTSTR szMsg, bool bSendSelf);
	virtual void	BroadcastMapMsg		(CNetMsg* pMsg, bool bSendSelf);
	virtual void	BroadcastMapMsg		(LPCTSTR szMsg, bool bSendSelf);
	virtual bool	SendSysMsg			(const char* fmt, ...);
	virtual bool	SendSysMsg	(int nChannel, const char* fmt, ...);

	virtual DWORD	GetSynID			()				{ return QuerySynAttr()->GetSynID(); }
	virtual DWORD	GetMasterSynID		()				{ if(QuerySynAttr()->GetSynID()==ID_NONE) return ID_NONE; return this->GetSyndicate()->GetMasterSynID(); }
	virtual DWORD	GetSynRank			()				{ if(QuerySynAttr()->GetSynID()==ID_NONE) return RANK_NONE; return QuerySynAttr()->GetInt(SYNATTRDATA_RANK); }
	virtual DWORD	GetSynRankShow		()				{ if(QuerySynAttr()->GetSynID()==ID_NONE) return RANK_NONE; return QuerySynAttr()->GetSynRankShow(); }

	virtual UCHAR	GetNobilityRank		()			    { return m_data.GetNobilityRank(); }  //add huang 2003.12.29
	virtual void	SetNobilityRank		(DWORD dwNobilityRank, bool bUpdate = true)	{ m_data.SetNobilityRank(dwNobilityRank, bUpdate); }
public:	// game card system -------------------
	bool		CheckInCard	(void);
	bool		CheckOutCard(void);
	int			CountCard	(void);

	bool		CheckInCard2	(void);
	bool		CheckOutCard2	(void);
	int			CountCard2		(void);

public:	// mining -------------------
	void		Mine	(IRole* pRole);
	void		StopMine(void);

private:
	void		ProcessMineTimer(void);
	int			m_nMineCount;
	CTimeOutMS	m_tMine;
	CNpc*		m_pMineTarget;

public:	// equipment improve -------------------
	OBJID		ChkUpEqQuality	(CItem* pItem, bool bSendHint=false);
	OBJID		ChkUpEqLevel	(CItem* pItem, bool bSendHint=false);

	bool		GetUpEpQualityInfo		(CItem* pItem, int& nChance, OBJID& idNewType, bool bSendHint=false);
	bool		GetUpEpLevelInfo		(CItem* pItem, int& nChance, OBJID& idNewType, bool bSendHint=false);

	int			GetChanceUpEpQuality	(int nPosition, bool bSendHint=false);
	int			GetChanceUpEpLevel		(int nPosition, bool bSendHint=false);

	bool		UpEquipmentQuality		(int nPosition);	// for action use
	bool		UpEquipmentLevel		(int nPosition);	// for action use
	bool		DownEquipmentLevel		(int nPosition, int nUserLevel);	// for action use

	void		UpEquipmentQuality		(OBJID idEquipment, OBJID idTreasure);
	void		UpEquipmentLevel		(OBJID idEquipment, OBJID idTreasure);
	void		EmbedGem				(OBJID idItem, OBJID idGem, int nPos);
	void		TakeOutGem				(OBJID idItem, int nPos);

	bool		RecoverEquipmentDur		(int nPos);

	bool		IsAllNonsuchEquip		(void);

public:	// gem effect  -------------------
	int			GetGemMgcExpEffect	(void);
	int			GetGemWpnExpEffect	(void);
	int			GetGemExpEffect		(void);
	int			GetGemAtkEffect		(void);
	int			GetGemMgcAtkEffect	(void);

	void		SendGemEffect		(void);

public:	// sprite  -- add by zlong 2003-12-05
	int			GetSpriteFace		()			{ if(m_pSprite) return (m_pSprite->GetSpriteLevel()*5 + m_pSprite->GetSpriteType()); return 0xFF; }

public: // lock key ------------------------------
	bool		SetLock(DWORD dwKey);
	bool		OpenLock(DWORD dwKey);
	bool		ClearLock(DWORD dwKey);
	bool		CheckLock(bool bSynchro=true);

public: // move
//	virtual		void	TransPos		(int nPosX, int nPosY);		// 传送,完全的新坐标
//	virtual		void	JumpPos			(int nPosX, int nPosY);		// 跳,半屏以内
//	virtual		bool	MoveToward		(int nDir);
//	virtual		bool	SyncTrackTo		(int nPosX, int nPosY, int nDir, DWORD dwAction);

	void		SetSynchro				(bool bSynchro)		{ if(bSynchro) m_tSynchro.Clear(); else m_tSynchro.Startup(SYNCHRO_SECS); }
	bool		IsSynchro				()					{ return !(m_tSynchro.IsActive() && !m_tSynchro.TimeOver()); }
	bool		SynPosition			(int nPosX, int nPosY, int nMaxDislocation = 8);
	void		ProcessOnAttack		();
	void		ProcessOnMove		(int nMoveMode);
	void		ProcessAfterMove	();
	void		GetFootPrint	(int& nPosX, int& nPosY);
	bool		KickBack();
	bool		Synchro();
	void		StandTurnon()								{ ASSERT(!m_bStand); m_tStand.Clear(); m_bStand = true; /*GetMap()->IncRole(GetPosX(), GetPosY());*/ }
	void		StandTurnoff()								{ m_tStand.Clear(); if(m_bStand){ m_bStand = false; /*GetMap()->DecRole(GetPosX(), GetPosY());*/ }}
	void		StandRestart()								{ StandTurnoff(); m_tStand.Update(); }
protected:
	CTimeOut	m_tSynchro;			// invalid: wait for client actionSynchro.
	DWORD		m_tFootPrint;
	POINT		m_posFootPrint;
	auto_long	m_bRun;
	CTimeOutMS	m_tStand;
	auto_long	m_bStand;
	CTimeOut	m_tAutoReborn;		// 复活宝石使用定时器

public:	// map ----------------------
	OBJID		GetMapID						();
	OBJID		GetRecordMapID					();
	bool		ChangeMap						();
//	enum { FLYMAP_ERROR=-1, FLYMAP_NORMAL, FLYMAP_MAPGROUP };
	int 		FlyMap							(OBJID idMap, int nPosX, int nPosY);		// return false: can't fly
	void		GotoJail						(void);
	virtual bool		SendSelfToBlock			();
	
public: // main -------------------------------------
	SOCKET_ID	GetSocketID			()						{ return m_idSocket; }
	virtual bool	IsAgent			()						{ return false; }			// agent overload
	virtual CAgent*	QueryAgent		()						{ ASSERT(!"QueryAgent"); return NULL; }			// agent overload
	void		SaveInfo			();		// save all info
	void		RemoteCall			(REMOTE_CALL0* pInfo);
	OBJID		GetAccountID		()						{ return m_data.m_Info.idAccount; }

public: // const -------------------------------------

public: // leave word ---------------------------------------
	bool		IsMoreLeaveWord()							{ return m_bHaveLeaveWord; }
	void		SetLeaveWord(bool nFlag)					{ m_bHaveLeaveWord = nFlag; }
	bool		AddLeaveWord(LPCTSTR szRecv, LPCTSTR szWords);
protected:
	bool		m_bHaveLeaveWord;
//	CTimeOut	m_tLeaveWord;

public: // bonus
	bool	DoBonus			(void);
	void	SendBonusInfo	(void);

public: // common -------------------------------------
//	static int	AdjustData			(int nData, int nAdjust, int nMaxData=0);
	static int	GetLook(DWORD dwLookFace)					{ return dwLookFace%1000; }
	static int	GetFace(DWORD dwLookFace)					{ return (dwLookFace/10000)%1000; }
//	static int	GetSex(DWORD dwLookFace)					{ return (m_pInfo->dwLookFace/1000)%10; }
	static int	GetTransFormLook(DWORD dwLookFace)			{ return dwLookFace/10000000; }

public: // IUserStorage ---------------------------------------------------
	IUserStorage*	QueryStorage()							{ return (IUserStorage*)this; }
protected: 
	virtual bool	SendStorageInfo(OBJID idNpc, int nPosition = ITEMPOSITION_STORAGE);
	virtual bool	CheckIn(OBJID idNpc, CItem* pItem, bool bUpdate = true, int nPosition = ITEMPOSITION_STORAGE);
	virtual CItem*	CheckOut(OBJID idNpc, OBJID idItem, bool bUpdate, int nPosition = ITEMPOSITION_STORAGE);
	virtual int 	GetStorageCount()						{ IF_OK(m_pStorage) return m_pStorage->GetAmount(); return 1234567890; }
	virtual int		GetWeight(OBJID idItem)					{ IF_OK(m_pStorage) return m_pStorage->GetWeight(idItem); return ERROR_WEIGHT; }
	virtual OBJID	GetItemType(OBJID idItem)				{ IF_OK(m_pStorage) return m_pStorage->GetItemTypeByID(idItem); return ID_NONE; }
	virtual DWORD	GetAmountLimit(OBJID idItem)			{ IF_OK(m_pStorage) return m_pStorage->GetItemAmountLimitByID(idItem); return 0; }

protected:
	CPackage*		m_pStorage;
//LW 拍买相关-----------------------------------------------------------------
public:
    int  GetAuctionPackageAmount(OBJID idNpc,int nPosition = ITEMPOSITION_AUCTION_STORAGE);
	bool AuctionGoodsBackOff(CItem * pItem, int nPosition = ITEMPOSITION_AUCTION_STORAGE);
//----------------------------------------------------------------------------
public:	// modify attrib ------------------------------
	int			GetAddPoint			();

	int			GetAutoAllot		()					{return m_data.GetAutoAllot();}
	void		SetAutoAllot		(int nAutoAllot)	{m_data.SetAutoAllot(nAutoAllot);}

//	int			GetMetempsychosis		()					{return m_data.GetMetempsychosis();}
	void		SetMetempsychosis		(int nMetempsychosis)	{m_data.SetMetempsychosis(nMetempsychosis);}
    void		SetMaxLifePercent	(int nPercent, BOOL bUpdate = TRUE);
	//checked ok
	bool		AddAttrib			(int idxAttr, __int64 i64Data, int nSynchro);
	void		SetAttrib			(int idxAttr, __int64 i64Data, int nSynchro);

public:	// marriage ------------------------------
	void		UpdateMate			(const char* pszName, bool bUpdate = true);
	bool		IsMarried			(void);
	bool		IsMate				(CUser* pUser);
	bool		Court				(OBJID idTarget);
	bool		Marry				(OBJID idTarget);
	bool		Divorce				(void);

public: // master & Prentic ----------------------------------
	bool		IsMasterPrentice	(CUser* pUser)		{ return false; }

public: // mount
protected:
	CTimeOut	m_tMount;

public:	// sprite -- add by zlong 2003-11-28
protected:
	CTimeOut			m_tSprite;

public: // cheat --------------------------------------------------------
	enum { _TYPE_MAGIC=0, _TYPE_WS=1, _TYPE_FY=2, _TYPE_USE_LIFE=3, _TYPE_USE_MANA=4, }; // 无双// 风云	// 用红药// 用蓝药
	bool		SetCheatLevel(int nLevel);
	void		KickoutCheat(OBJID idKind);
	int			GetCheatLevel()						{ return m_nCheatLevel; }
	bool		IsCheater(OBJID idKind);
	bool		IsMagicAtkCheat	(OBJID idTarget, int nTargetX, int nTargetY, DWORD dwTimeStamp);
	void		SetCheatMark(OBJID idCheatKind, DWORD dwCheatMark);
	void		DoCheaterPunish	(int nData = 0);

	DWORD		m_dwLastJump;
	DWORD		m_dwMsgCount;

	bool		CheckTimeStamp(DWORD dwTimeStamp)				{ if(dwTimeStamp-m_dwLastTimeStamp>50) { m_dwLastTimeStamp=dwTimeStamp; return true; } return false; }

protected:

⌨️ 快捷键说明

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