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