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

📄 charinfo.h

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 H
📖 第 1 页 / 共 2 页
字号:
	{
		m_nCurPoint = nPoint;
	}

	int GetCurrentPoint() const
	{
		return m_nCurPoint;
	}

private:
	int	m_nMaxPoint;
	int	m_nCurPoint;
};
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// 某腐磐 沥焊俊 包茄 努贰胶
class CBaseArena;
class CArenaTeam;
class CCharInfo : public CHAR_DATA
{
public:
	CCharInfo();
	
public:
	void InitCombat();
	void IncAbility(BYTE nType);
	void DecAbility(BYTE nType);
	
	void ResetAbility(BYTE nCombat);
	void DivideAbility(BYTE nNext);
	void ConvertTacticsLevel(BYTE nKind);
	void Message(BYTE nType, BYTE nKind, WORD nNumber);
	
	bool IncExperience(int nExp); // CSD-030930
	bool DecExperience(bool bNK); // CSD-030930

	bool IncTacticExp(BYTE nKind, int Exp); // CSD-030930
	bool DecTacticExp(BYTE nKind, bool bNK); // CSD-030930

	int GetWeaponSkill();
	int GetAbility(BYTE nType) const;
	int GetNpcAttack() const;
	int GetNpcDefence() const;
	int GetNpcMagic() const;
	int GetNpcDefence(BYTE nType) const;
	int GetNpcStrikePiercing() const; // CSD-021024
	int GetNpcMagicPiercing() const;  // CSD-021024
	int GetNpcStunAvoid() const;      // CSD-021024
	int GetNpcSlowAvoid() const;      // CSD-021024
	int GetNpcPoisonAvoid() const;    // CSD-021024
	int GetNpcBlindAvoid() const;     // CSD-021024
	int GetNpcDrainAvoid() const;     // CSD-021024
	int GetNpcFreezeAvoid() const;    // CSD-021024
	int GetMovePower(BYTE nType) const;
	int GetDistance(int nX, int nY) const;
	int GetRiseFall(int nX, int nY) const;	
	int GetWeaponKind() const;
	int GetTacticsKind() const;
	int GetCombatValue(int nIndex) const;
	int GetPureLife() const;
	int GetExtendAc() const;
	int GetItemEffectNumber() const; // CSD-031007
	
	void GetStepInfo(char* pData, int nSize);
	void SetStepInfo(char* pData, int nCount);
	
	int CorrectCombatAttack(int nCombat, int nResult) const;
	int CorrectCombatDefense(int nCombat, int nResult) const;
	int CorrectItemEffect() const; // CSD-031007
	
	bool LevelUpAbility();
	bool LevelUpTactics(int nKind);
	bool LevelUpCombat(int nKind, int nPoint);

	bool ChangeUpAddExp(int nExp); // CSD-TW-030624
	bool ChangeUpAddExpBonus(int nExp); // CSD-TW-030624 
	bool ChangeUpTacExp(int nType, int nExp); // CSD-TW-030624

	void GenerateNpcName();
	void AutoAttribute();
	void SetAttribute(int nRace);
	
	bool IsShield() const;
	bool IsArrow() const;
	bool IsLimit(int nPoint = 0) const;
	bool IsEnableCombat(BYTE nCombat) const;
	
	void Rare_Squad();
	void Rare_Eat();
	void Rare_Inv();
	void Rare_Quick();
	void Rare_Equip();
	void CalcRareEffect(int iFlag);
	bool IsLimitedAge( const int nLimitedAge){ return ( m_nUserAge > nLimitedAge ? false:true); }; // 030929 kyo //怕惫俊辑 荤侩窍绰 蜡历唱捞 力茄
	
public:
	inline int IncLife(int nVolume, int nMax);
	inline int DecLife(int nVolume, int nMin);
	inline int IncMana(int nVolume, int nMax);
	inline int DecMana(int nVolume, int nMin);
	inline int IncHungry(int nVolume, int nMax);
	inline int DecHungry(int nVolume, int nMin);
	inline int IncCombat(int nVolume, int nMax);
	inline int DecCombat(int nVolume, int nMin);
	
	short GetServerID() const { return m_idServer; } // CSD-HK-030830
	int GetLevel() const { return m_nLevel; } // CSD-030806
	int GetGuildCode() const { return m_nGuildCode; } // CSD-030806
	int GetReservedPoint() const { return m_gnAbility.GetPoint(); }
	int GetCombatPoint() const { return m_gnCombat.GetPoint(); }
	int GetDualClass() const { return m_nDualCls; }
	int GetClassStep() const { return m_nClsStep; }
	int GetExperienceStep() const { return m_nExpStep; }
	int GetTacticsStep(int nIndex) const { return m_aTacStep[nIndex]; }
	int GetNK(int nNation) const { return nk[nNation]; }
	int GetCombatLevel(int nIndex) const { return Skill[nIndex - 100]; }
	int GetWanted() const { return m_bWanted; }
	CBaseArena* GetJoinArenaGame() const { return m_pArenaGame; }  // CSD-030509
	CArenaTeam* GetJoinArenaTeam() const { return m_pArenaTeam; }  // CSD-030509
	
	void SetServerID(short idServer) { m_idServer = idServer; } // CSD-HK-030829
	void SetLevel(int nLevel) { m_nLevel = nLevel; } // CSD-030806
	void SetGuildCode(int nGuildCode) { m_nGuildCode = nGuildCode; } // CSD-030806
	void SetReservedPoint(int nPoint) { m_gnAbility.SetPoint(nPoint); }
	void SetCombatPoint(int nPoint) { m_gnCombat.SetPoint(nPoint); }
	void SetDualClass(int nDual) { m_nDualCls = __int8(nDual); }
	void SetClassStep(int nStep) { m_nClsStep = __int8(nStep); }
	void SetExperienceStep(int nStep) { m_nExpStep = __int8(nStep); }
	void SetTacticsStep(int nIndex, int nStep) { m_aTacStep[nIndex] = __int8(nStep); }
	void SetCombatLevel(int nIndex, int nLevel) { Skill[nIndex - 100] = nLevel; }
	void SetWanted(bool bWanted) { if (IsPlayer())  m_bWanted = bWanted; }
	void SetJoinArenaGame(CBaseArena* pGame) { m_pArenaGame = pGame; }  // CSD-030509
	void SetJoinArenaTeam(CArenaTeam* pTeam) { m_pArenaTeam = pTeam; }  // CSD-030509
	
	void IncReservedPoint(int nPoint = 1) { m_gnAbility.Increase(nPoint); }
	void DecReservedPoint(int nPoint = 1) { m_gnAbility.Decrease(nPoint); }
	void IncCombatPoint(int nPoint = 1) { m_gnCombat.Increase(nPoint); }
	void DecCombatPoint(int nPoint = 1) { m_gnCombat.Decrease(nPoint); }
	
	bool IsDead() const { return (Hp <= 0) ? true:false; }
	bool IsHungry() const { return (Hungry <= 0) ? true:false; }
	bool IsFullLife() const {return (Hp >= HpMax) ? true:false; }
	bool IsFullMana() const {return (Mana >= ManaMax) ? true:false; }
	bool IsFullHungry() const {return (Hungry >= HungryMax) ? true:false; }
	bool IsFullCombat() const {return (Cp >= CpMax) ? true:false; } // CSD-030506
	bool IsPlayer() const { return (SprType < SPRITETYPE_NPC) ? true:false; }
	bool IsNpc() const { return (SprType > SPRITETYPE_CHARACTER) ? true:false; }
	bool IsDual() const { return m_nClsStep > 0; }
	bool IsUltraNK(int nNation) const { return (nk[nNation] >= ULTRA_NK) ? true:false; }
	bool IsJoinArenaGame() const { return (m_pArenaGame == NULL) ? false:true; } // CSD-030509
	bool IsJoinArenaTeam() const { return (m_pArenaTeam == NULL) ? false:true; } // CSD-030509
	bool IsLevelUp()            const { return (GetLevel() < MAX_EXP_LEVEL) ? true:false; }
	bool IsLevelUp(int nLevel)  const { return (nLevel < MAX_TAC_LEVEL) ? true:false; }
	
	bool IsIgnoreNormalLevel()     const { return m_bsAttr[IGNORE_NORMAL_LEVEL]; }
	bool IsIgnorePhysicalAttack()  const { return m_bsAttr[IGNORE_STRIKE_ATTACK]; }
	bool IsIgnorePhysicalDefence() const { return m_bsAttr[IGNORE_STRIKE_DEFENSE]; }
	bool IsIgnoreMagicAmplify()    const { return m_bsAttr[IGNORE_MAGIC_AMPLIFY]; }
	bool IsIgnoreMagicResist()     const { return m_bsAttr[IGNORE_MAGIC_RESIST]; }
    
	void SendCharInfoBasic(BYTE nKind, DWORD dwData) const; // CSD-TW-030620
	void SendCharInfoTactic(BYTE nKind) const; // CSD-TW-030620
	//021030 lsw 背券 函版
	int  GetExchangeTargetId()const{return m_iExchangeTargetId;}//芭贰 措惑阑 罐绰促
	const char*  GetExchangeTargetName()const{return &m_szExchangeTargetName[0];}//芭贰 措惑阑 罐绰促
	void SetExchangeTarget(const int iTradeTarget,const char* szTargetName)
	{
		m_iExchangeTargetId = iTradeTarget;
		strcpy(m_szExchangeTargetName,szTargetName);
	}//芭贰 措惑阑 汲沥 茄促
	
	int  GetExchangeType()const{return m_iExchangeType;}//芭贰 鸥涝阑 罐绰促
	void SetExchangeType(const int iTradeType){m_iExchangeType = iTradeType;}//芭贰 鸥涝阑 汲沥茄促
	
	int  GetExchangeState()const{return m_iExchangeState;}//芭贰 惑怕甫 罐绰促
	void SetExchangeState(const int iStateType){m_iExchangeState = iStateType;}//芭贰 惑怕甫 汲沥茄促
	
	void SetTradeMode(const bool bIsTradeOn){m_bExchangeMode = bIsTradeOn;}//芭贰 惑怕甫 汲沥茄促
	bool IsTradeOn()const{return !m_bExchangeMode;}//Trade On Off 蔼阑 府畔茄促. m_bExchangeMode --> false 老版快 Trade On 捞促
	
	void ClearExchangeInfo()//芭贰 沥焊甫 努府绢 矫糯
	{
		::memset( give, 0, sizeof( K_ITEM ) * MAX_EXCHANGE_ITEM );
		::memset( recv, 0, sizeof( K_ITEM ) * MAX_EXCHANGE_ITEM );
		m_iExchangeTargetId =0; 
		m_iExchangeType = EXCHANGE_TYPE_NO; 
		m_iExchangeState = EXCHANGE_STATE_READY;
		::strcpy(m_szExchangeTargetName,"");
	}

	bool IsCounselor() const { return (name_status.counselor) ? true:false; }
	bool IsReporter() const { return (name_status.reporter) ? true:false; }
	bool IsPayedUser() const { return (BT_FREE != GetBillingType()) ? true:false; } //捞 蜡历绰 捣阑 辰 蜡历牢啊?

	short GetBillingType()const{return m_nBillingType;}
	void SetBillingType(const short wValue){m_nBillingType = wValue;}

	DWORD GetBankMoney() const 
	{	//< CSD-030723
		return m_dwBankMoney;
	}	//> CSD-030723
	
	void SetBankMoney(const DWORD dwMoney, const eBankMoneyChangeType BMCT)
	{	//< CSD-030723
		::SaveChangeBankMoney(GetServerID(), GetBankMoney(), dwMoney, BMCT);
		
		m_dwBankMoney = dwMoney;
	}	//> CSD-030723
			
	bool IncBankMoney(const DWORD dwMoney, const eBankMoneyChangeType BMCT, const bool bSend = true)
	{	//< CSD-030723
		if (DWORD(MAX_BANK_MONEY - m_dwBankMoney) >= dwMoney) //ULONG_MAX
		{
			SetBankMoney(m_dwBankMoney + dwMoney, BMCT);
			
			if (bSend)
			{	//篮青捣 盎脚
				SendCharInfoBasic(BANKMONEY, GetBankMoney());
			}

			return true;
		}

		return false;
	}	//> CSD-030723

	bool DecBankMoney(const DWORD dwMoney, const eBankMoneyChangeType BMCT, const bool bSend = true)
	{	//< CSD-030723
		if (m_dwBankMoney >= dwMoney) //波尘 捣焊促 乐绰 捣捞 腹栏搁
		{	//篮青捣 盎脚
			SetBankMoney(m_dwBankMoney - dwMoney, BMCT);
			
			if(bSend)
			{
				SendCharInfoBasic(BANKMONEY, GetBankMoney());
			}
			
			return true;
		}

		return false;
	}	//> CSD-030723

	bool IsEventRecv() { return m_bEventRecv; } ;			// BBD 040308
	void SetEventRecv(bool val) { m_bEventRecv = val; } ;	// BBD 040308
	
protected:
	int GetExtStr() const;
	int GetExtCon() const;
	int GetExtDex() const;
	int GetExtWis() const;
	int GetExtInt() const;
	int GetExtMove() const;
	int GetExtChar() const;
	int GetExtEndu() const;
	int GetExtMor() const;
	int GetExtLuck() const;
	int GetExtWs() const;
	int GetExtPs() const;
	
	int GetRemainStr() const;
	int GetRemainCon() const;
	int GetRemainDex() const;
	int GetRemainWis() const;
	int GetRemainInt() const;
	int GetRemainMove() const;
	int GetRemainChar() const;
	int GetRemainEndu() const;
	int GetRemainMor() const;
	int GetRemainLuck() const;
	int GetRemainWs() const;
	int GetRemainPs() const;
	
	int CalcNewLife(BYTE nCombat) const;
	int CalcNewMana(BYTE nCombat) const;
	int CalcNewHungry(BYTE nCombat) const;
	int CalcNewCombat() const;
	int CalcNewAc() const;
	
	int CalcWeaponHit() const;
	int CalcCriticalHit(BYTE nActive, BYTE nPassive) const;
	int CalcTacticExp(BYTE nKind, DWORD dwExp) const;
	
	void AddPhysicalTacExp1(int nKind, int nExp); // CSD-TW-030624
	void AddPhysicalTacExp2(int nKind, int nExp); // CSD-TW-030624
	void AddPhysicalTacExp3(int nKind, int nExp); // CSD-TW-030624
	void AddMagicTacExp1(int nKind, int nExp); // CSD-TW-030624
	void AddMagicTacExp2(int nKind, int nExp); // CSD-TW-030624
	
private:
	bool IsLimitExp(int nLevel);
	bool IsLimitTac(int nKind);
	
protected:
	enum
	{
		IGNORE_NORMAL_LEVEL = 0,
		IGNORE_STRIKE_ATTACK = 1,
		IGNORE_STRIKE_DEFENSE = 2,
		IGNORE_MAGIC_AMPLIFY = 3,
		IGNORE_MAGIC_RESIST = 4,
		IGNORE_MAX = 5
	};
	
	bitset<IGNORE_MAX> m_bsAttr; // 加己蔼
	
protected:
	mutable __int8 m_nCriticalCount;   // CSD-031007 : 农府萍漠 洒飘甫 困茄 墨款飘
	mutable __int8 m_nItemEffectCount; // CSD-031007 : 酒捞袍 瓤苞甫 困茄 墨款飘

private:
	short	m_idServer;          // CSD-HK-030829
	int     m_nLevel;			 // CSD-030806
	int		m_nGuildCode;		 // CSD-030806
	__int8  m_nDualCls;          // 掂倔 努贰胶 辆幅
	__int8  m_nClsStep;          // 努贰胶 窜拌
	__int8  m_nExpStep;          // 版氰摹 窜拌
	__int8  m_aTacStep[NO_TAC];  // 琶平 版氰摹 窜拌
	
	bool	m_bEventRecv;		// BBD 040308	捞亥飘 酒捞袍 吝汗 瘤鞭夸没阑 阜绰 敲贰弊
private:
	CGainPoint  m_gnAbility;     // 棵副 荐 乐绰 绢呼矾萍 器牢磐
	CGainPoint  m_gnCombat;      // 棵副 荐 乐绰 傈捧胶懦 器牢磐
	bool	    m_bWanted;     // 泅惑裹 咯何
	DWORD	    m_dwBankMoney;	//篮青捣
	short	    m_nBillingType;	//苞陛 鸥涝
	CBaseArena* m_pArenaGame; // CSD-030509
	CArenaTeam* m_pArenaTeam; // CSD-030509
};
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// 牢扼牢 窃荐
inline int CCharInfo::IncLife(int nVolume, int nMax = 100) 
{ // Life 刘啊
	const int nOld = Hp;
	const int nLimit = HpMax*nMax/100;
	Hp += nVolume; 
	if (Hp > nLimit)  Hp = nLimit;
	return Hp - nOld;
}

inline int CCharInfo::DecLife(int nVolume, int nMin = 0) 
{ // Life 皑家
	const int nOld = Hp;
	const int nLimit = HpMax*nMin/100;
	Hp -= nVolume; 
	if (Hp < nLimit)  Hp = nLimit;
	return nOld - Hp;
}
// 付过仿俊 包访等 Method
inline int CCharInfo::IncMana(int nVolume, int nMax = 100)
{ // Mana 刘啊
	const int nOld = Mana;
	const int nLimit = ManaMax*nMax/100;
	Mana += nVolume; 
	if (Mana > nLimit)  Mana = nLimit;
	return Mana - nOld;
}

inline int CCharInfo::DecMana(int nVolume, int nMin = 0) 
{ // Mana 皑家
	const int nOld = Mana;
	const int nLimit = ManaMax*nMin/100;
	Mana -= nVolume; 
	if (Mana < nLimit)  Mana = nLimit;
	return nOld - Mana;
}

inline int CCharInfo::IncHungry(int nVolume, int nMax = 100) 
{ // 硅绊悄沥档 刘啊
	const int nOld = Hungry;
	const int nLimit = HungryMax*nMax/100;
	Hungry += nVolume; 
	if (Hungry > nLimit)  Hungry = nLimit;
	return Hungry - nOld;
}

inline int CCharInfo::DecHungry(int nVolume, int nMin = 0)
{ // 硅绊悄沥档 皑家
	const int nOld = Hungry;
	const int nLimit = HungryMax*nMin/100;
	Hungry -= nVolume; 
	if (Hungry < nLimit)  Hungry = nLimit;
	return nOld - Hungry;
}

inline int CCharInfo::IncCombat(int nVolume, int nMax = 100) 
{ // 傈捧胶懦 荤侩啊瓷樊 刘啊
	const int nOld = Cp;
	const int nLimit = CpMax*nMax/100;
	Cp += nVolume; 
	if (Cp > nLimit)  Cp = nLimit;
	return Cp - nOld;
}

inline int CCharInfo::DecCombat(int nVolume, int nMin = 0)
{ // 傈捧胶懦 荤侩啊瓷樊 皑家
	const int nOld = Cp;
	const int nLimit = CpMax*nMin/100;
	Cp -= nVolume; 
	if (Cp < nLimit)  Cp = nLimit;
	return nOld - Cp;
}
//
///////////////////////////////////////////////////////////////////////////////
#endif // !defined(AFX_CHARINFO_H__1A212137_3131_4DD3_8343_EE42343C165E__INCLUDED_)

⌨️ 快捷键说明

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