📄 hero.h
字号:
// 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 + -