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

📄 hero.h

📁 网络游戏魔域源代码 测试可以完整变异
💻 H
📖 第 1 页 / 共 3 页
字号:
// Hero.h: interface for the CHero class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HERO_H__E1E1F17C_8E9A_439A_B54A_E7A6D3213111__INCLUDED_)
#define AFX_HERO_H__E1E1F17C_8E9A_439A_B54A_E7A6D3213111__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "NetworkDef.h" 
#include "Player.h"
#include "Pet.h"
#include "SchoolMember.h"
#include "Friend.h"
#include "Enemy.h"
#include "Item.h"
#include "AutoAllot.h"
#include "Trade.h"
#include "Package.h"
#include "Bank.h"
#include "XpCounterDown.h"
#include "WeaponSkill.h"
#include "TaskDialog.h"
#include "Team.h"
#include "Professional.h"
#include "Magic.h"
#include "MyTimer.h"
#include "ImageString.h"
#include "Booth.h"
#include "BoothManager.h"
#include "Bulletin.h"
#include "Dummy.h"
#include "DiceManager.h"
#include "Check.h"
#include "ItemPackage.h"
// constant ...
const int _MAGIC_DECDELAY_PER_LEVEL		= 100;		
const int _MAGIC_DELAY					= 600;

const int _MAX_FRIEND_AMOUNT	= 50;
const int _MAX_HEROITEM			= 40;
const int _MAX_HEROEGG			= 6;
const int _MAX_HEROPET			= 3;
const int _MAX_HEROSOUL         = 40;
const int _POWERCOST_JUMP		= 10;


// for teacher annouce 
enum{
	_ANNOUNCE_ISSUE = 0, //发布公告to server
		_ANNOUNCE_CHECK, //查看公告to client
			_ANNOUNCE_SLEF_CHECK, //查看自己的公告to client
				_ANNOUNCE_USER_INFO,//to server/client在发布时,客户端要用到的信息。 返回客户端的:等级,//,导师等级 信息结构中char szBuf[1]的内容为:姓名,职业
					_ANNOUNCE_CANCEL,//取消公告 要idAnnounce			
};

typedef struct {
	OBJID idAnnounce; // 公告ID
	char szTitle[32]; // 公告标题
}ST_ANNOUNCE_TITLE;

enum{
	CHECK_BY_INDEX,
		CHECK_BY_ID,
			CHECK_BY_OWNER,
};

typedef deque<ST_ANNOUNCE_TITLE*> DEQUE_ANNOUNCE;

typedef struct {
	int				usType;
	OBJID			idAnnounce;
	OBJID			user_id;
	int				level;// 发布公告人的等级
	int				teacher_level;// 导师等级
	char			szBuf[1];//to client 姓名,职业,公告标题,公告内容 
}ST_ANNOUNCE_INFO;

typedef struct {
	int				usType;
	OBJID			idAnnounce;
	OBJID			user_id;
	int				level;
	int				teacher_level;// 导师等级
	int				profession;
	string			szName;
	string			szTitle; //公告标题
	string			szDesc;//公告内容 
}AnnounceInfo;

// player task
enum {
	_WANT_PK		= 0,	// 悬赏PK
		_WANT_ITEM		= 1,	// 悬赏物品
			_WANT_EUDEMON	= 2,	// 悬赏幻兽
};

enum
{
	RELATION_TEACHER = 1, // 导师
		RELATION_STUDENT,	// 徒弟
		  RELATION_STUDENTOFSTUDENT, // 徒弟的徒弟(徒孙)
};

const int _MAX_PRIZE = 5;

enum {
		TASKLIST_NONE = 0,
		TASKLIST_UNACCEPTED, // 未接任务
		TASKLIST_ACCEPTED, // 已接任务
		TASKLIST_COMPLETED, // 已完成任务
		TASKLIST_MYTASK, // 我的任务
};

typedef struct
{
	OBJID idTask; // 任务ID
	UCHAR ucReqLev; // 需要佣兵等级
	char szTitle[32]; // 任务标题
}ST_TASK_TITLE;

typedef deque<ST_TASK_TITLE*> DEQUE_PLAYERTASK;

typedef struct 
{
	union {
		OBJID idItem; // 物品ID // to server的时候
		struct { // to client的时候
			OBJID idItemType; // 物品类型
			USHORT usDurability; // 耐久
			UCHAR ucAddition; // 追加 // 幻兽成长
			UCHAR ucDegree; // 等级 // 幻兽等级
		};
	};
}ST_PLAYERTASK_ITEM;


typedef struct
{
	OBJID idTask;
	// 如果是物品 需要物品的附加属性
	DWORD dwDurability;	// 耐久	
	UCHAR ucAddition;	// 追加 // 幻兽成长
	UCHAR ucDegree;		// 等级 // 幻兽等级
	
	DWORD	dwMoney;
	UCHAR	ucType;		// 悬赏类型
	UCHAR	ucRankReq; // 需要的佣兵等级

	ST_PLAYERTASK_ITEM infoItem[_MAX_PRIZE];
	string strName;
	string strDesc;
	string strWant;
}TaskInfo;

//是否自动分配点数
enum {_NOT_AUTOALLOT = 0, _AUTOALLOT = 1};
enum {_DEL_PT = false, _DEL_OBJ = true};

enum {PKMODE_FREE=0, PKMODE_MONSTERONLY, PKMODE_TMEXCLUDE, PKMODE_ARRESTMENT, PKMODE_SYNDICATE};
// 自由PK 安全PK 组队 捕杀 骑士团

enum {REJECT_FRIEND=0, REJECT_TRADE=1, REJECT_TEAM=2, REJECT_TEACHER =3 ,REJECT_STUDENT = 4};
enum {PACKAGE_BAG=0, PACKAGE_PET=1, PACKAGE_EGG=2, PACKAGE_SOUL=3};

#include <deque>
typedef deque<char*> DEQUE_STRING;

#include <string>
typedef struct 
{
	vector<string> m_setStr;
	int			   nHelpIndex;
	bool	       bActived;
}UserHelpTip;

typedef struct
{
	UCHAR   ucLevel; // 等级
	BOOL	bOnLine;
	DWORD   dwSynID;
	int		nProffer; // 贡献度
	UCHAR	ucRank; // 职位
	UCHAR	ucProfession; // 职业
	UCHAR	ucNobilityRank; // 爵位
	SHORT	sPk; // PK值
	DWORD	dwLookFace; // FACE
	char	szName[_MAX_NAMESIZE];
	char	szRank[_MAX_NAMESIZE];
	char szMate[_MAX_NAMESIZE]; // 配偶名字
}SynMemberInfo;
typedef deque<SynMemberInfo*> DEQUE_SYNMEMBER;

typedef struct 
{
	OBJID		idSyn;						
	OBJID		idFealty;
	DWORD		dwSyndicateFund;			// 帮派基金
	DWORD		dwSyndicatePopulation;		// 帮派人口
	UCHAR		ucRank;						// 等级
	UCHAR		ucSaint;
	char		szName[_MAX_NAMESIZE];		// 
	char		szLeader[_MAX_NAMESIZE];	// 帮主
}SyndicateInfo;

class CHero : public CPlayer  
{
public:
	CHero();
	virtual ~CHero();

	void	Init	(void);
	void	Reset	(void);

public:
	void	Walk			(int nPosX, int nPosY);
	void	Run				(int nPosX, int nPosY);
	void	Jump			(int nPosX, int nPosY);
	void	Direction		(int nPosX, int nPosY);
	
	void	InTone			(DWORD dwMagicTYpe, CPlayer* pTarget=NULL);
	void	TeamFollow		();

	void	Emotion			(int nEmotionType, CPlayer* pTarget=NULL);
	void	Stop			(void);

	void	Poison			(CPlayer* pTarget, OBJID idItem);
	void	Dart			(CPlayer* pTarget, OBJID idItem);
	void	Steal			(CPlayer* pTarget);

	void	DeleteRole		(void);

	void	SetAlignPos(int nPosX, int nPosY);
	CMyPos	GetAlignPos(void)	{return m_posAlign;}

	// override
	DWORD	SetCommand		(CCommand* pCommand);
	BOOL	ProcessCommand	();

	OBJID	m_idAccount;

public:
	BOOL	ProcessChgMap	(void);	// return true means to chg

	void	Process(void* pInfo);
	void	Show	(void* pInfo);
	void	ShowXp	(void);

public:
	void	Talk			(CPlayer* pTarget, const char* pszWords, const char* pszEmotion=NULL, DWORD dwColor=0xffffff, unsigned short unAttribute=_TXTATR_NORMAL, unsigned short unStyle=_TXT_NORMAL);
	void	Talk			(const char* pszTarget, const char* pszWords, const char* pszEmotion=NULL, DWORD dwColor=0xffffff, unsigned short unAttribute=_TXTATR_NORMAL, unsigned short unStyle=_TXT_NORMAL);

private:
	DWORD	m_dwLastTalk;
	
// mine
public:
	void	Mine	(void);
	BOOL	IsMiner	(void);

// item improve
public:
	void	ImproveItem(OBJID idItem, OBJID idTreasure);

	void	EmbedGem	(OBJID idItem, OBJID idGem, int nPos);
	void	TakeOutGem	(OBJID idItem, int nPos);

	BOOL	SplitItem	(OBJID idItem, int nAmount);
	BOOL	CombinItem	(OBJID idItemSource, OBJID idItemTarget);
	
// point allot
public:
	void	AllotPoint(int nForce, int nSpeed, int nHealth, int nSoul);
	void	DoLevelUp();
	DWORD	GetNextLevelExp();

private:
	CMyPos	m_posAlign;
	DWORD	m_dwMoney;

	DWORD	m_dwAutoAllot;
	DWORD	m_dwKoXpAdd;

	DWORD	m_dwLifeForeCast;
	DWORD	m_dwLastLifeSync;
	OBJID	m_idTaskDialog;
	BOOL	m_bShowHpBar;
	//CAutoAllot m_objAllot;
public:
	void	OpenHpBar(){m_bShowHpBar = true;}
	void	CloseHpBar(){m_bShowHpBar = false;}
	BOOL	IsShowLife(){return m_bShowHpBar;}
// ko Order
public:
	DWORD	GetKoXpAdd(){return m_dwKoXpAdd;}
	void	SetKoXpAdd(DWORD dwKoXpAdd){m_dwKoXpAdd = dwKoXpAdd;}
// normal attack
public:
	void	Attack			(CPlayer* pTarget, BOOL bForced=false);
	void	Shoot			(CPlayer* pTarget, OBJID idBullet, BOOL bForced=false);

	void	LockAttack		(CPlayer* pTarget, BOOL bForced=false, BOOL bMove = true);
	void	RushAttack		(CPlayer* pTarget, BOOL bForced=false);
	void	SkillAttack		(CPlayer* pTarget, OBJID idSkillType, BOOL bForced=false);	

	void	SetLifeForeCast	(DWORD dwLife){m_dwLifeForeCast = dwLife; m_dwLastLifeSync = ::TimeGet();}
	DWORD	GetLifeForeCast	(){return m_dwLifeForeCast;}
	void	ProcessLifeForeCast();
	void	SetData(DWORD dwDataType, DWORD dwData);

	BOOL	m_bFirstAtk;

// xp
public:
	enum {XPFULL_TIME = 60000,KILLAWARD_XPTIME = 0};

	void	BurstXp();
	void	ResetXpFullTime(DWORD dwFullTime);
	void	ProcessXp	(void);

	DWORD	m_dwXpFullTime;
	DWORD   m_dwXpStartTime;

	void	AddKoCount	();	//杀怪数量
	DWORD	m_dwKoCount;
	DWORD	m_dwKoScale;

/*/ super soldier
public:		
	enum {TICKS_SPSOLDIER = 20, INTERVAL_SPSOLDIER = 1000, TICKS_SPSOLDIER_INIT = 20, KILL_AWARD_SPSOLDIER = 800, KILL_AWARD_TORNADO = 1000};

	DWORD	m_dwSuperSoldierBegin;
	DWORD	m_dwSuperSoldierBeginCopy;
*/


// reborn
public:
	void	ProcessReborn	(void);
	DWORD	m_timeDie, m_timeGhost;

//for userhelpinfo
public:
	bool    m_bCanSetHelpTips;
	bool	IsFlyHelpShow();
	void	ResetFlyHelp();
	void    ResetFlyHelpIndex(int nIndex){m_nResetIndex = nIndex;}
	int		GetHelpTipAmount(int nIndex);
	const char* GetHelpTipLineByIndex(int nIndex,int nLine);

	int		GetFlyHelpAmount();
	void	SetHelpTip(OBJID IdItemType=0,OBJID IdMagic	=0,int nMagicLevel=0,BOOL bLevelUp=false);
	void	ShowHelpTips(int posShowX, int posShowY, int nWidth = 420,DWORD dwColor = 0xffffff,DWORD dwBkColor = 0x1E000080);

	void	ActivedHelpTips(int nAmount);
	void	ClearHelpTip();

	void	SetTips();
	const char*	GetTipsByLine(int nLine);
	int		GetTipsAmount();
	
	void	ClearTips();
protected:
	int	  m_nLoopTime;
	bool  m_bShowFlyHelp;
	DWORD m_dwLoginTime;
	DWORD m_dwStayTime;
	DWORD m_dwStartTime;
	BOOL  m_bSetHelpTip;
	int	  m_nShowIndex;	
	int   m_nResetIndex;
	
	vector<UserHelpTip*> m_setHelpTip;
	vector<string> m_setTips;
	
	bool  CheckHelpTip(int nIndex);
	const char* GetFlyHelpByIndex(int nIndex);
// for syndicate
private:
	DWORD	m_dwTimeSynWarReportLastFlash;
	vector<string> m_setSynKickDoc;
public:
	OBJID    IsSubSynLeader  ();
	OBJID    IsSubSubSynLeader();
	void	SetSynName(int naction,char* szName);
	void	MoveSynMember(char* szName,OBJID idTarget);
	void	QuerySynKickDoc();
	int		GetSynKickDocAmount();
	void	AddSynKickDoc(char* pszName);
	void	TakeInSynKickDoc(char* pszName);
	void	AgreeSynKickDoc(int nIndex,BOOL bAgree);
	const char*   GetSynKickDocByIndex(int nIndex);
	void	ClearSynKickDoc() {m_setSynKickDoc.clear();}
	void	JoinSynMember	(CPlayer* pTarget);
	void	AcceptSynMember	(CPlayer* pTarget);

⌨️ 快捷键说明

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